2017-01-02 73 views
0

窄的瓶頸連續的區域我想要得到的輪廓的不斷區,但不必在輸出非常狹窄的地方。查找不使用OpenCV的

輸入圖像可以是這樣的圖像(應用閾值之後):Input image

通過打電話只是OpenCVs findContours方法,我得到以下結果:Actual output

我的問題是,我不希望在結果中具有窄(白色)峯。只是模糊圖像將不起作用,因爲我不能包括黑色峯。所以想要的輸出應該看起來像這條綠線:Ideal output

是否有可能告訴OpenCV(findContours)該區域的最小「厚度」?

+0

你爲什麼不使用[形態學操作(http://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html)至擺脫那些? –

回答

1

Erosion可以看作添加邊界像素的背景。因此,它在您的輸入中擺脫了這些狹窄的部分。但是,由於它扭曲了所有邊界,所以之後需要應用dilation,以消除侵蝕對實際邊界的影響。侵蝕+膨脹過程被稱爲opening

下面的代碼部分產生期望的輸出。根據您的圖像大小,使用k_size進行播放。然後申請findContours

# Read and binarize the image 
image = cv2.imread("test.png",cv2.IMREAD_GRAYSCALE) 
ret, im_th =cv2.threshold(image,150,255,cv2.THRESH_BINARY) 

# Set the kernel and perform opening 
k_size = 7 
kernel = np.ones((k_size,k_size),np.uint8) 
opened = cv2.morphologyEx(im_th, cv2.MORPH_OPEN, kernel) 
cv2.imwrite("opened.png", opened) 

輸出:

Opened output with no islands

+0

謝謝,您的解決方案完美無缺! – wessnerj

0

使用腐蝕,然後用擴張小仁你做findContours之前。有一個在OpenCV的一種特殊的經營者,不只是說,叫OpeningmorphologyEx

像這樣的東西應該工作:

morphologyEx(src, dst, MORPH_OPEN, Mat());