窄的瓶頸連續的區域我想要得到的輪廓的不斷區,但不必在輸出非常狹窄的地方。查找不使用OpenCV的
通過打電話只是OpenCVs findContours方法,我得到以下結果:
我的問題是,我不希望在結果中具有窄(白色)峯。只是模糊圖像將不起作用,因爲我不能包括黑色峯。所以想要的輸出應該看起來像這條綠線:
是否有可能告訴OpenCV(findContours)該區域的最小「厚度」?
窄的瓶頸連續的區域我想要得到的輪廓的不斷區,但不必在輸出非常狹窄的地方。查找不使用OpenCV的
通過打電話只是OpenCVs findContours方法,我得到以下結果:
我的問題是,我不希望在結果中具有窄(白色)峯。只是模糊圖像將不起作用,因爲我不能包括黑色峯。所以想要的輸出應該看起來像這條綠線:
是否有可能告訴OpenCV(findContours)該區域的最小「厚度」?
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)
輸出:
謝謝,您的解決方案完美無缺! – wessnerj
使用腐蝕,然後用擴張小仁你做findContours
之前。有一個在OpenCV的一種特殊的經營者,不只是說,叫Opening與morphologyEx
像這樣的東西應該工作:
morphologyEx(src, dst, MORPH_OPEN, Mat());
你爲什麼不使用[形態學操作(http://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html)至擺脫那些? –