我使用OpenCV来过滤图像中的特定颜色,因此我得到了检测到的区域的二进制图像。
现在我想要侵蚀这些区域,然后去掉较小的区域,并找到最大的“blob”的x,y坐标。
我正在寻找关于使用什么库最好的建议?我见过cvBlob和cvBlobsLib,但我不太确定如何设置它们。我是想和项目一起编译它们,还是想编译它们并安装到系统中(就像我对OpenCV所做的那样)?
我目前在Ubuntu上使用Code::Blocks IDE (尽管这不应该限制事情)
发布于 2012-04-12 10:23:03
我来晚了,但我只想插一句,在opencv中有一种方法可以做连接组件,只是还没有主线。
更新:它是主流的,只是多年来一直在等待3.0的发布。Linky to documentation
请参阅http://code.opencv.org/issues/1236和http://code.opencv.org/attachments/467/opencv-connectedcomponents.patch
免责声明-我是作者。
发布于 2011-01-10 06:14:37
您可以使用findContours来做到这一点,请参阅opencv manual和Tutorial to find connected components。
编辑:教程中的代码(通过Archive.org)
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
int main(int argc, char *argv[])
{
IplImage *img, *cc_color; /*IplImage is an image in OpenCV*/
CvMemStorage *mem;
CvSeq *contours, *ptr;
img = cvLoadImage(argv[1], 0); /* loads the image from the command line */
cc_color = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
cvThreshold(img, img, 150, 255, CV_THRESH_BINARY);
mem = cvCreateMemStorage(0);
cvFindContours(img, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP,
CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
for (ptr = contours; ptr != NULL; ptr = ptr->h_next) {
CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );
cvDrawContours(cc_color, ptr, color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));
}
cvSaveImage("result.png", cc_color);
cvReleaseImage(&img);
cvReleaseImage(&cc_color);
return 0;
}发布于 2011-01-10 05:21:11
不幸的是,OpenCV没有任何连接组件标记功能,这对于计算机视觉库来说似乎是一个严重的遗漏。无论如何,我最近有一个类似的需求,所以我实现了我自己的CCL例程-在CCL Wikipedia page上描述了几种不同的算法,它们都很容易实现。
https://stackoverflow.com/questions/4641817
复制相似问题