2011-08-05 33 views
0

OpenCV cvFindContour()方法獲取8連接的鄰居規則之後的連接組件。有沒有辦法將它變成4連接的鄰居規則 - 檢查連通性時不會考慮拐角單元。將CvFindContours()從8連接更改爲4連接的鄰居

顯然Mathematica用一個簡單的CornerNeighbors->Falseshown here on SO來做到這一點。 在OpenCV中這樣做的任何方式?即使我們真的要改變cv * .h文件中的函數定義(這相當有毛病)......任何指針?

回答

1

恐怕這是不可能的,你可以考慮建議一個代碼更改爲opencv,添加一個標誌,允許這樣做。目前,在該文件中:

http://code.opencv.org/projects/opencv/repository/entry/trunk/opencv/modules/imgproc/src/contours.cpp

有一個名爲icvCodeDeltas數組,它決定了所有的鄰居。你可以檢查它在哪裏,並添加一個

static const CvPoint icvCodeDeltas4[4] = { {1, 0}, {0, -1}, {-1, 0}, {0, 1} }; 

這是用於例如CV_NEIGHBOURS_CROSS指定。然後請opencv社區添加它,這是開源工作的方式。也許一個快速的,骯髒的,你,應該待羞愧的解決將是這樣的:

virtual CvPoint icvCodeDeltas[8]; 
icvCodeDeltas = { {1, 0}, {0, -1}, {-1, 0}, {0, 1}, {1, 0}, {0, -1}, {-1, 0}, {0, 1} }; 

但我沒有測試這一點,我不知道這是否會避免「靜態」和「常量'所以要小心;)