Beispiel #1
0
void cOpenCV<T>::write(const cData3<T>& object, const std::string& fileName, eNorm8bit norm8bit) const
{
    const std::string   funcName("void cOpenCV::write("
                                    "const cData3<T>& object, "
                                    "const std::string& fileName, "
                                    "eNorm8bit norm8bit) const");

    require(object.getAddrData()  != NULL, funcName + ": writing an empty object to an OpenCV file");
    require(object.getDimension() == 2,    funcName + ": writing a non-image object to an OpenCV file");

    cv::Mat     cvData((int) object.getNrow(), (int) object.getNcol(), CV_8U);
    cData3<T>   dataSave;

    switch (norm8bit) {
        case NORM8BIT_TRUE:
            dataSave = object;
            dataSave.normalize8bit();

            #pragma omp parallel for
            for(size_t i = 0; i < object.getNelement(); i++) {
                 cvData.data[i] = (uint8_t) dataSave[i];
            }
            break;
        case NORM8BIT_FALSE:
            #pragma omp parallel for
            for(size_t i = 0; i < object.getNelement(); i++) {
                 cvData.data[i] = (uint8_t) object[i];
            }
            break;
        default:
            ERROR(funcName, "unsupported norm8bit mode");
    }

    cv::imwrite(fileName.c_str(), cvData);
}
Beispiel #2
0
MStatus cvColor::compute( const MPlug& plug, MDataBlock& data )
{ 
	MStatus stat;

	// cout << "cvColor::compute\n";

	if ( plug == cvLocations ) {
		MDataHandle inputData = data.inputValue ( inputSurface, &stat );
		if (!stat) {
			stat.perror("cvColor::compute get inputSurface");
			return stat;
		}

		MObject surf = inputData.asNurbsSurface();
		MFnNurbsSurface surfFn (surf, &stat);
		if (!stat) {
			stat.perror("cvColor::compute surface creator");
			return stat;
		}

		MDataHandle outputData = data.outputValue ( cvLocations, &stat );
		if (!stat) {
			stat.perror("cvColor::compute get cvLocations");
			return stat;
		}
		
		MObject cvs = outputData.data();
		MFnPointArrayData cvData(cvs, &stat);
		if (!stat) {
			stat.perror("cvColor::compute point array data creator");
			return stat;
		}

		MPointArray cvArray;
		stat = surfFn.getCVs( cvArray, MSpace::kObject);
		if (!stat) {
			stat.perror("cvColor::compute getCVs");
			return stat;
		}

		stat = cvData.set ( cvArray );
		if (!stat) {
			stat.perror("cvColor::compute setCVs");
			return stat;
		}

		outputData.set ( cvs );

		stat = data.setClean ( plug );
		if (!stat) {
			stat.perror("cvColor::compute setClean");
			return stat;
		}
	} else {
		return MS::kUnknownParameter;
	}

	return MS::kSuccess;
}
Beispiel #3
0
void cOpenCV<T>::putText(const cData3<T>& object, const std::string& fileName,
                         const std::string& textStr,
                         eColorName textColor,
                         T scale,
                         eNorm8bit norm8bit)
{
    const std::string   funcName("void cOpenCV::putText("
                                    "const cData3<T>& object, "
                                    "const std::string& fileName, "
                                    "const std::string& textStr, "
                                    "eColorName textColor, "
                                    "T scale, eNorm8bit norm8bit)");

    require(object.getAddrData()  != NULL, funcName + ": writing an empty object to an OpenCV file");
    require(object.getDimension() == 2,    funcName + ": writing a non-image object to an OpenCV file");
    require(textStr.length()      != 0,    funcName + ": putting an empty text string onto an OpenCV image");

    cv::Mat         cvData     ((int) object.getNrow(), (int) object.getNcol(), CV_8U  );
    cv::Mat         cvDataColor((int) object.getNrow(), (int) object.getNcol(), CV_8UC3);
    cData3<T>       dataSave;

    switch (norm8bit) {
        case NORM8BIT_TRUE:
            dataSave = object;
            dataSave.normalize8bit();

            #pragma omp parallel for
            for(size_t i = 0; i < object.getNelement(); i++) {
                 cvData.data[i] = (uint8_t) dataSave[i];
            }

            cvtColor(cvData, cvDataColor, cv::COLOR_GRAY2RGB);
            break;
        case NORM8BIT_FALSE:
            #pragma omp parallel for
            for(size_t i = 0; i < object.getNelement(); i++) {
                 cvData.data[i] = (uint8_t) object[i];
            }

            cvtColor(cvData, cvDataColor, cv::COLOR_GRAY2RGB);
            break;
        default:
            ERROR(funcName, "unsupported norm8bit mode");
    }

    switch (textColor) {
        case COLOR_WHITE:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(255,255,255), (int)(2*scale), cv::LINE_AA);
            break;
        case COLOR_BLACK:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(  0,  0,  0), (int)(2*scale), cv::LINE_AA);
            break;
        case COLOR_RED:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(  0,  0,255), (int)(2*scale), cv::LINE_AA);
            break;
        case COLOR_GREEN:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(  0,255,  0), (int)(2*scale), cv::LINE_AA);
            break;
        case COLOR_BLUE:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(255,  0,  0), (int)(2*scale), cv::LINE_AA);
            break;
        case COLOR_CYAN:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(255,255,  0), (int)(2*scale), cv::LINE_AA);
            break;
        case COLOR_MAGNETA:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(255,  0,255), (int)(2*scale), cv::LINE_AA);
            break;
        case COLOR_YELLOW:
            cv::putText(cvDataColor, textStr, cv::Point(0,(int)(30*scale)),
                        cv::FONT_HERSHEY_SIMPLEX, scale, cv::Scalar(  0,255,255), (int)(2*scale), cv::LINE_AA);
            break;
        default:
            ERROR(funcName, "unsupported color mode");
    }

    cv::imwrite(fileName.c_str(), cvDataColor);
}
Beispiel #4
0
void cvColor::draw( M3dView & view, const MDagPath & path, 
							 M3dView::DisplayStyle style,
							 M3dView::DisplayStatus status )
{ 
	// cout << "cvColor::draw\n";

	MStatus		stat;
	MObject		thisNode = thisMObject();

	MPlug enPlug( thisNode, drawingEnabled );
	bool doDrawing; 
	stat = enPlug.getValue ( doDrawing );
	if (!stat) {
		stat.perror("cvColor::draw get drawingEnabled");
		return;
	}

	if (!doDrawing)
		return;

	MPlug szPlug( thisNode, pointSize );
	float ptSize; 
	stat = szPlug.getValue ( ptSize );
	if (!stat) {
		stat.perror("cvColor::draw get pointSize");
		ptSize = 4.0;
	}

	MPlug cvPlug( thisNode, cvLocations );
	MObject cvObject;
	stat = cvPlug.getValue(cvObject);
	if (!stat) {
		stat.perror("cvColor::draw get cvObject");
		return;
	}

	MFnPointArrayData cvData(cvObject, &stat);
	if (!stat) {
		stat.perror("cvColor::draw get point array data");
		return;
	}

	MPointArray cvs = cvData.array( &stat );
	if (!stat) {
		stat.perror("cvColor::draw get point array");
		return;
	}

	// Extract the 'worldMatrix' attribute that is inherited from 'dagNode'
	//
	MFnDependencyNode fnThisNode( thisNode );
	MObject worldSpaceAttribute = fnThisNode.attribute( "worldMatrix" );
	MPlug matrixPlug( thisNode, worldSpaceAttribute);

	// 'worldMatrix' is an array so we must specify which element the plug
	// refers to
	matrixPlug = matrixPlug.elementByLogicalIndex (0);

	// Get the value of the 'worldMatrix' attribute
	//
	MObject matObject;
	stat = matrixPlug.getValue(matObject);
	if (!stat) {
		stat.perror("cvColor::draw get matObject");
		return;
	}

	MFnMatrixData matrixData(matObject, &stat);
	if (!stat) {
		stat.perror("cvColor::draw get world matrix data");
		return;
	}

	MMatrix worldSpace = matrixData.matrix( &stat );
	if (!stat) {
		stat.perror("cvColor::draw get world matrix");
		return;
	}

	if ( view.isColorIndexMode() ) {
		cerr << "Can't update cv colors in color index mode\n";
		return;
	}

	view.beginGL(); 

	// Push the color settings
	// 
	glPushAttrib( GL_CURRENT_BIT | GL_POINT_BIT );
	glPointSize( ptSize );
	glDisable ( GL_POINT_SMOOTH );  // Draw square "points"

	glBegin( GL_POINTS );

		int numCVs = cvs.length();
		for (int i = 0; i < numCVs; i++) {
			// cout << "cv[" << i << "]: " << cvs[i] << ": ";
			MPoint		cv( cvs[i] );
			MColor		cvColor;

			cv *= worldSpace;

			if (cv.x < 0 && cv.y < 0) {
				// cout << "Red";
				cvColor.r = 1.0;
				cvColor.g = 0.0;
				cvColor.b = 0.0;
			} else if (cv.x < 0 && cv.y >= 0) {
				// cout << "Cyan";
				cvColor.r = 0.0;
				cvColor.g = 1.0;
				cvColor.b = 1.0;
			} else if (cv.x >= 0 && cv.y < 0) {
				// cout << "Blue";
				cvColor.r = 0.0;
				cvColor.g = 0.0;
				cvColor.b = 1.0;
			} else if (cv.x >= 0 && cv.y >= 0) {
				// cout << "Yellow";
				cvColor.r = 1.0;
				cvColor.g = 1.0;
				cvColor.b = 0.0;
			}
			// cout << endl;

			view.setDrawColor ( cvColor );
			glVertex3f( (float)cvs[i].x, (float)cvs[i].y, (float)cvs[i].z);
		} 
	glEnd();

	glPopAttrib();

	view.endGL();
}