我想在下面的圖片中使用OpenCV中的findcontours()函數。OpenCV findcontours爲每個圓圈返回2個輪廓
findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
當我做這個查詢:contours.size()
它返回18,所以,似乎2輪廓每個圓圈。這個圓圈就像你可以看到的1個像素的厚度,2個輪廓如何?如果是這樣,它是一個用於外部,一個用於內部,如何強制該功能爲每個圓圈檢測一個輪廓?我認爲輪廓被定義爲像素的連續序列,1像素厚。
但是,當我看這個例子[這裏](http://jmpelletier.com/a-simple-opencv-tutorial/)它似乎不是分別計算內部和外部。但是這個例子有findcontours的C版本。舊的和新的實現有區別嗎? –
不,在C和C++版本之間不應有任何影響最終結果的差異。事實上,從我記憶中,其中一個只是另一個的包裝。 但是,從這個鏈接看圖片,我看到了與你所說的完全相反的東西。它似乎是檢測每個圓的內外輪廓,這使得在那裏顯示的圖像更有意義 – Naps62
的確,使用CV_RETR_EXTERNAL標誌應該爲您修復它。這裏有一個完整的標誌列表: http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#void findContours(InputOutputArray image,OutputArrayOfArrays輪廓,OutputArray層次結構,int模式,int方法,Point偏移量) –