void renderChains(IplImage * SWTImage, std::vector<std::vector<Point2d> > & components, std::vector<Chain> & chains, IplImage * output) { // keep track of included components std::vector<bool> included; included.reserve(components.size()); for (unsigned int i = 0; i != components.size(); i++) { included.push_back(false); } for (std::vector<Chain>::iterator it = chains.begin(); it != chains.end(); it++) { for (std::vector<int>::iterator cit = it->components.begin(); cit != it->components.end(); cit++) { included[*cit] = true; } } std::vector<std::vector<Point2d> > componentsRed; for (unsigned int i = 0; i != components.size(); i++) { if (included[i]) { componentsRed.push_back(components[i]); } } LOGL(LOG_CHAINS, componentsRed.size() << " components after chaining"); IplImage * outTemp = cvCreateImage(cvGetSize(output), IPL_DEPTH_32F, 1); renderComponents(SWTImage, componentsRed, outTemp); cvConvertScale(outTemp, output, 255, 0); cvReleaseImage(&outTemp); }
void renderComponentsWithBoxes (IplImage * SWTImage, std::vector<std::vector<Point2d> > & components, std::vector<std::pair<Point2d,Point2d> > & compBB, IplImage * output) { IplImage * outTemp = cvCreateImage ( cvGetSize ( output ), IPL_DEPTH_32F, 1 ); renderComponents(SWTImage,components,outTemp); std::vector<std::pair<CvPoint,CvPoint> > bb; bb.reserve(compBB.size()); for (std::vector<std::pair<Point2d,Point2d> >::iterator it=compBB.begin(); it != compBB.end(); it++ ) { CvPoint p0 = cvPoint(it->first.x,it->first.y); CvPoint p1 = cvPoint(it->second.x,it->second.y); std::pair<CvPoint,CvPoint> pair(p0,p1); bb.push_back(pair); } IplImage * out = cvCreateImage ( cvGetSize ( output ), IPL_DEPTH_8U, 1 ); cvConvertScale(outTemp, out, 255, 0); cvCvtColor (out, output, CV_GRAY2RGB); //cvReleaseImage ( &outTemp ); //cvReleaseImage ( &out ); int count = 0; for (std::vector<std::pair<CvPoint,CvPoint> >::iterator it= bb.begin(); it != bb.end(); it++) { CvScalar c; if (count % 3 == 0) c=cvScalar(255,0,0); else if (count % 3 == 1) c=cvScalar(0,255,0); else c=cvScalar(0,0,255); count++; cvRectangle(output,it->first,it->second,c,2); } }
void BrushInstance::renderCommon (Renderer& renderer, const VolumeTest& volume) const { bool componentMode = GlobalSelectionSystem().Mode() == SelectionSystem::eComponent; if (componentMode && isSelected()) { renderComponents(renderer, volume); } if (parentSelected()) { if (!componentMode) { renderer.Highlight(Renderer::eFace); } renderer.Highlight(Renderer::ePrimitive); } }
void renderChainsWithBoxes (IplImage * SWTImage, std::vector<std::vector<Point2d> > & components, std::vector<Chain> & chains, std::vector<std::pair<Point2d,Point2d> > & compBB, IplImage * output) { // keep track of included components std::vector<bool> included; included.reserve(components.size()); for (unsigned int i = 0; i != components.size(); i++) { included.push_back(false); } for (std::vector<Chain>::iterator it = chains.begin(); it != chains.end();it++) { for (std::vector<int>::iterator cit = it->components.begin(); cit != it->components.end(); cit++) { included[*cit] = true; } } std::vector<std::vector<Point2d> > componentsRed; for (unsigned int i = 0; i != components.size(); i++ ) { if (included[i]) { componentsRed.push_back(components[i]); } } IplImage * outTemp = cvCreateImage ( cvGetSize ( output ), IPL_DEPTH_32F, 1 ); std::cout << componentsRed.size() << " components after chaining" << std::endl; renderComponents(SWTImage,componentsRed,outTemp); std::vector<std::pair<CvPoint,CvPoint> > bb; bb = findBoundingBoxes(components, chains, compBB, outTemp); IplImage * out = cvCreateImage ( cvGetSize ( output ), IPL_DEPTH_8U, 1 ); cvConvertScale(outTemp, out, 255, 0); cvCvtColor (out, output, CV_GRAY2RGB); cvReleaseImage ( &out ); cvReleaseImage ( &outTemp); int count = 0; for (std::vector<std::pair<CvPoint,CvPoint> >::iterator it= bb.begin(); it != bb.end(); it++) { CvScalar c; if (count % 3 == 0) c=cvScalar(255,0,0); else if (count % 3 == 1) c=cvScalar(0,255,0); else c=cvScalar(0,0,255); count++; cvRectangle(output,it->first,it->second,c,2); } }