我使用OpenCV篩選某些顏色的圖像,所以我得到了一個二進制圖像的檢測區域。在OpenCV中的斑點提取
現在我想蠶食這些領域,然後擺脫規模較小的,並找到X,最大的「斑點」
我一直在尋找的建議,以什麼最好的圖書館將是y座標使用?我見過cvBlob和cvBlobsLib,但我不太清楚如何設置它們。我想將它們與項目一起編譯還是我想編譯它們並將它們安裝到系統中(就像我使用OpenCV一樣)?
我目前使用的代碼::塊IDE在Ubuntu(儘管這不應該限制的東西)
我使用OpenCV篩選某些顏色的圖像,所以我得到了一個二進制圖像的檢測區域。在OpenCV中的斑點提取
現在我想蠶食這些領域,然後擺脫規模較小的,並找到X,最大的「斑點」
我一直在尋找的建議,以什麼最好的圖書館將是y座標使用?我見過cvBlob和cvBlobsLib,但我不太清楚如何設置它們。我想將它們與項目一起編譯還是我想編譯它們並將它們安裝到系統中(就像我使用OpenCV一樣)?
我目前使用的代碼::塊IDE在Ubuntu(儘管這不應該限制的東西)
我對派對遲到了,但我只是想侃侃而談,有一種方法可以在opencv中執行連接組件,它只是沒有主要功能。
更新:它的主線,它只是堅持等待3.0發佈多年。 Linky to documentation
見http://code.opencv.org/issues/1236和http://code.opencv.org/attachments/467/opencv-connectedcomponents.patch
免責聲明 - 我是作者。
不幸的OpenCV沒有任何連通區域標記功能,這似乎是一個嚴重的遺漏計算機視覺庫。無論如何,我最近有一個類似的要求,所以我實現了我自己的CCL例程 - 在CCL Wikipedia page上描述了幾種不同的算法,它們都很容易實現。
您可以使用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;
}
我認爲最好的和容易的選擇與斑點工作,OpenCV的是使用cvBlob庫。它是OpenCV的一個輔助庫,它非常易於使用。
這似乎是最好的選擇,謝謝:)它似乎是OpenCV的一部分,你是對的。 – amr 2011-01-09 21:47:04
OpenCV網站上有第三方blob庫(cvBlobsLib或類似的文件),但我看了一下,代碼質量並不好。我認爲,在這種情況下更好地推出自己的產品。 – 2011-01-09 21:50:26
正如在另一個答案中提到的,沒有找到Contours給出的等效連接組件的標籤? – carnieri 2011-01-10 17:49:07