OpenCV将白色像素分组
我已经完成了艰苦的工作,将我的MacBook上的iSight摄像头转换为红外摄像头,转换它,设置阈值等等。现在有一个图像,看起来像这样:
替代文字
我现在的问题是; 我需要通过对白色像素进行分组来了解我的图像上有多少个斑点。 我不想使用cvBlob
/ cvBlobsLib
,我宁愿使用OpenCV中已有的东西。
我可以遍历像素,并通过检查(阈值)触摸白色像素来对它们进行分组,但是我猜测OpenCV中可能有这么简单的方法吗?
我猜我不能使用cvFindContours
因为这将检索一个大阵列中的所有白色像素,而不是将它们分隔成“组”。 谁能推荐? (请注意,这些不是圆形,只是小红外LED发出的光线)
提前谢谢了!
tommed
在图像中循环寻找白色像素。 当你遇到一个你使用cvFloodFill
与该像素作为种子。 然后增加每个区域的填充值,以便每个区域具有不同的颜色。 这被称为标签。
是的,你可以用cvFindContours()
来做到这cvFindContours()
。 它将指针返回到找到的第一个序列。 使用该指针可以遍历所有找到的序列。
// your image converted to grayscale
IplImage* grayImg = LoadImage(...);
// image for drawing contours onto
IplImage* colorImg = cvCreateImage(cvGetSize(grayImg), 8, 3);
// memory where cvFindContours() can find memory in which to record the contours
CvMemStorage* memStorage = cvCreateMemStorage(0);
// find the contours on image *grayImg*
CvSeq* contours = 0;
cvFindContours(grayImg, memStorage, &contours);
// traverse through and draw contours
for(CvSeq* c = contours; c != NULL; c = c->h_next)
{
cvCvtColor( grayImg, colorImg, CV_GRAY2BGR );
cvDrawContours(
colorImg,
c,
CVX_RED,
CVX_BLUE,
0, // Try different values of max_level, and see what happens
2,
8
);
}
除了这个方法,我建议你看看cvBlobs
或cvBlobsLib
。 后者一个作为官方的blob检测库集成在OpenCV 2.0中。