使用OpenCV从边缘图像中删除长水平/垂直线

Ass*_*vie 8 opencv image-processing

如何使用标准图像处理过滤器(来自OpenCV)从图像中删除长水平和垂直线?

图像是B&W,因此删除意味着简单地绘制黑色.

插图:

所需过滤器的插图

我目前正在使用Python,迭代像素行和列并检测连续像素的范围,删除那些长于N像素的像素.但是,与OpenCV库相比,它确实很慢,如果有一种方法可以实现与OpenCV功能相同的功能,那么可能会快几个数量级.

我想这可以通过使用一行像素(对于水平线)的内核进行卷积来完成,但是我很难确定完成这一操作的确切操作.

Zaw*_*Lin 9

如果你的线条是真正的水平/垂直,试试这个

import cv2
import numpy as np
img = cv2.imread('c:/data/test.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
linek = np.zeros((11,11),dtype=np.uint8)
linek[5,...]=1
x=cv2.morphologyEx(gray, cv2.MORPH_OPEN, linek ,iterations=1)
gray-=x
cv2.imshow('gray',gray)
cv2.waitKey(0)    
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

您可以参考OpenCV Morphological Transformations文档以获取更多详细信息.

  • `Mat linek = Mat :: zeros(Size(11,11),CV_8UC1); linek.row(5)= 255;` (4认同)