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 CVFindOnTours()未检测到单独的组件_Image Processing_Opencv - Fatal编程技术网

Image processing CVFindOnTours()未检测到单独的组件

Image processing CVFindOnTours()未检测到单独的组件,image-processing,opencv,Image Processing,Opencv,我试图在图像的一个小区域内找到连接的组件(如果有的话)。但是,cvFindContours()函数将明显独立的组件分组为一个组件,从而导致进一步的计算不正确 如何获取区域内的独立组件?(对功能检测到的不同组件进行着色) 代码如下: IplImage* cc_img = cvCreateImage( cvGetSize(src), src->depth, 3 ); cvSetZero(cc_img); CvScalar(ext_color); CvMemStorage *mem;

我试图在图像的一个小区域内找到连接的组件(如果有的话)。但是,cvFindContours()函数将明显独立的组件分组为一个组件,从而导致进一步的计算不正确

如何获取区域内的独立组件?(对功能检测到的不同组件进行着色)

代码如下:

    IplImage* cc_img = cvCreateImage( cvGetSize(src), src->depth, 3 );
cvSetZero(cc_img);
CvScalar(ext_color);

CvMemStorage *mem;
mem = cvCreateMemStorage(0);
CvSeq *contours = 0;
CvSeq *ptr;
int n_cont = 0;
int n = cvFindContours( src, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

for (ptr = contours; ptr != NULL; ptr = ptr->h_next) 
{
    n_cont++;

    ext_color = CV_RGB( rand()&255, rand()&255, rand()&255 ); //randomly coloring different contours
    cvDrawContours(cc_img, ptr, ext_color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));        
}


“CEL”被认为是单个组件

在运行
cvFindContours
之前,尝试应用一些形态过滤,例如
cvcorrove
cvMorphologyEx(…,CV\u MOP\u OPEN)
来扩大字母之间的距离,但我用Mathematica验证过,您可能希望指定两个组件只能通过其顶部、底部、左侧和右侧邻居连接。如果你考虑完整的8个邻居,那么所有的三个字母都是连接的,如你所示:

comp = MorphologicalComponents[img, CornerNeighbors -> False];
Colorize[comp]

这会扭曲字母本身。随后的代码将无法工作。尽管减薄操作可能有效。。。有没有办法修改cvFindContours()以使其正确检测?据我所知,没有……我遇到过类似的问题,通过在被侵蚀的图像上找到连接的组件,然后返回并屏蔽原始图像中的像素,并在被屏蔽的图像上重新运行cvFindContours()以获得正确的结果,我对此进行了黑客攻击;我明白了。你能更详细地介绍一下返回和掩蔽:原始图像中哪些像素被掩蔽了?嗨,你找到问题的答案了吗?我也遇到了同样的问题,对能做什么也没有想法。请帮忙!基本上将8连通邻居更改为4连通邻居。好的,我们来看看是否有办法修改
CvFindContours