我使用OpenCV和cvblob库来处理blob。
现在我想在这种特殊情况下检测blob。
在这种情况下的问题或困难是,在较大的一个上有两个斑点,而另一个斑点与较大的斑点的一部分重叠。
在cvblob库中,要检测blob,必须有一个二进制镜像。
我认为我需要创建两个或更多的图像来分割颜色均匀的斑点,然后将它们二值化以获得图像中的所有斑点。
我怎么能做到这一点。

提前感谢
发布于 2012-01-24 08:14:54
我是OpenCV的初学者,但我想,对于这种特殊情况,您应该使用带有CV_RETR_EXTERNAL标志的cvFindContours (使用CV_RETR_TREE,您的黄色斑点将在蓝色的斑点中),而不是使用cvblob。
这取决于你是否想要跟踪它们(cvblob提供了一种快速有效的方法来跟踪blob,而不是必须实现camshift)。
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* firstContour = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint), storage);
cvFindContours(image, storage, &firstContour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
// S'il y a un contour
if(firstContour != 0) {
for( CvSeq* c = firstContour; c != NULL; c = c->h_next ) {
for(int i = 0; i < c->total; ++i) {
// Get each point of the current contour
CvPoint* pt = CV_GET_SEQ_ELEM(CvPoint, c, i);
double x = pt->x;
double y = pt->y;
}
}
}有了轮廓给出的信息,你可以很容易地找到你的斑点的质心,角度和边界框。
跟踪这些斑点可能会更加困难,因为cvblob不喜欢重叠的斑点(如我所见)。您可能必须实现自己的跟踪方法。
https://stackoverflow.com/questions/6879586
复制相似问题