Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何使用OpenCV将细线提取为单独的轮廓/连接的组件?_Image Processing_Opencv - Fatal编程技术网

Image processing 如何使用OpenCV将细线提取为单独的轮廓/连接的组件?

Image processing 如何使用OpenCV将细线提取为单独的轮廓/连接的组件?,image-processing,opencv,Image Processing,Opencv,我在图像上使用了距离变换细化。现在尝试分别提取每个连接的组件-如果有两条细线,那么它应该检测三条这样的单独的线和组件 /*finding contours*/ IplImage *cc_color; cc_color = cvCreateImage(cvGetSize(thin_img), IPL_DEPTH_8U, 3); CvMemStorage *mem; mem = cvCreateMemStorage(0); int count = 0; char* ch = new

我在图像上使用了距离变换细化。现在尝试分别提取每个连接的组件-如果有两条细线,那么它应该检测三条这样的单独的线和组件

/*finding contours*/
IplImage *cc_color; 
cc_color = cvCreateImage(cvGetSize(thin_img), IPL_DEPTH_8U, 3);


    CvMemStorage *mem;
mem = cvCreateMemStorage(0);


int count = 0;
char* ch = new char [2];

CvSeq *contours = 0;

  CvSeq *ptr;
/*finding contours of morphed image*/
cvFindContours(thin_img, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP,       CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

    /*all contours on one image - random coloring*/
for (ptr = contours; ptr != NULL; ptr = ptr->h_next) 
    {
            CvScalar ext_color = CV_RGB( rand()&255, rand()&255, rand()&255 ); /*randomly coloring different contours*/
            cvDrawContours(cc_color, ptr, ext_color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));          
    }
瘦图像是输入。输出应将每条线随机着色为不同的轮廓/组件。然而,它只检测闭合形状作为轮廓。如何将线检测为组件

输出图像:

输入图像:


红色框表示应检测为组件的示例零件。但是只检测到闭合的形状。

如果要将线条/边框作为组件而不是内部区域进行查找,则应在应用
FindTours
之前反转
薄\u图像(黑色->白色和白色->黑色)。谢谢。这次成功了。这就是我先前错误的原因吗?因为细线是黑色的,CVFindOntours()将它们视为边界而不是对象?反演后,它们被视为物体,不再是边界。我希望在以后的开发过程中能够清楚地说明原因,所以请解释一下。是的,黑色是“边界”,白色是“对象”。