回答
MikeE的回答非常好:在這種情況下使用擴張和侵蝕形態操作可以提供很多幫助。
我想建議一點改進,利用手頭圖片的特定結構。我建議使用一個水平內核來連接水平線的端點,但不會將相鄰線彼此連接起來,而不是使用一般內核的擴展/侵蝕。
下面的代碼的草圖(假設輸入圖像被存儲在bw
numpy的2D陣列):
import cv2, numpy as np
kernel = np.ones((1,20), np.uint8) # note this is a HORIZONTAL kernel
d_im = cv2.dilate(bw, kernel, iterations=1)
e_im = cv2.erode(d_im, kernel, iteraions=1)
去除由dialte創建的工件/侵蝕,我建議以提取骨架再次
注意的差距是如何關閉,同時保持明顯的水平線
如果進一步應用骨架形態操作的侵蝕圖像,你可以得到這樣的結果:
一旦連接曲線你不需要使用分水嶺分割,而是使用連接的組件來標記每條曲線。
由於圖像已經是單色的,因此可以使用形態轉換來關閉折線。
如果你需要一個例子,你可以在這裏找到它的文檔中: http://docs.opencv.org/2.4/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html#closing
它的工作原理是首先擴張圖像中的白色區域,然後以相同的量侵蝕回來。有效關閉白色區域的任何孔。 更多細節和實施例可以在這裏找到: http://docs.opencv.org/2.4/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html
這種戰略要求的是,在虛線的間隙比相鄰線之間的距離小。
如果線條交叉或者線條彼此過於靠近,它將不起作用。不過,我認爲在你的例子中它會很好地工作。
您還可以使用侵蝕功能刪除第三行下面的工件。
你有多少時間進行計算? –
謝謝,邁克! –
- 1. 如何在二進制圖像中查找連接的組件?
- 2. 如何繪製虛線連接的點?
- 3. 在matlab中的二進制圖像連接破碎的圓圈?
- 4. 如何清除二進制圖像中未閉合的曲線?
- 5. 如何在Matlab中找到二進制圖像中的所有連接組件?
- 6. Matlab - 如何使用二進制圖像掩蓋三維圖像
- 7. 如何在python中使用二進制值連接字符串?
- 8. OpenCV如何在二進制圖像中查找連接組件的列表
- 9. 線檢測二進制圖像使用OpenCV的
- 10. 二進制圖像
- 11. 如何使用cv2保存二進制圖像(使用dtype = bool)?
- 12. 使用jquery加載二進制圖像
- 13. 二進制鎖itunes連接
- 14. cv2是否接受二進制圖像?
- 15. 如何用虛線製作進度條?
- 16. 如何連接使用ADODB.stream二進制文件在VBScript
- 17. 用線連接圖像
- 18. 如何從二進制圖像
- 19. 如何從二進制圖像
- 20. 如何顯示二進制圖像?
- 21. 如何將二進制圖像轉換爲Java中的二進制數組?
- 22. 如何在MATLAB中乘以二進制圖像和RGB圖像?
- 23. 如何找到二進制圖像中線段的x,y的中間點?
- 24. 如何訪問二進制Mat圖像中的像素值?
- 25. 在matlab中連接二進制數據?
- 26. 從控制器操作中,我如何使用圖像的二進制數據在視圖中顯示圖像?
- 27. 如何使用ImageMagick來二進制圖像?
- 28. 如何highchart轉換成二進制圖像使用highchart
- 29. 如何使用opencv從數組創建二進制圖像?
- 30. 如何使用Javascript和XMLHttpRequest加載二進制圖像數據?
謝謝你,謝謝! –