Image processing CVFindOnTours()未检测到单独的组件
我试图在图像的一个小区域内找到连接的组件(如果有的话)。但是,cvFindContours()函数将明显独立的组件分组为一个组件,从而导致进一步的计算不正确 如何获取区域内的独立组件?(对功能检测到的不同组件进行着色) 代码如下: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;
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