使用 OpenCV 查找垂直 1px 线

问题描述

我有一张类似于下图(左侧)的图片:

enter image description here

我只想提取右侧的红色像素:属于 1px 垂直线的像素,但提取到任何较粗的线或具有超过 1 个相邻黑色像素的其他区域。图像是双色调的。

到目前为止,我已经尝试了具有垂直(10px,这是我的目的)和水平内核的形态 OPEN 并采用了差异,但这需要一个尴尬的转变并留下一些“斑点”:


    vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,10))
    vertical_mask1 = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,vertical_kernel,iterations=1)

    horz_kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(2,1))
    horz_mask = cv2.morphologyEx(thresh,horz_kernel,iterations=1)

    M = np.float32([[1,-1],[0,1,1]])
    rows,cols = horz_mask.shape
    vertical_mask = cv2.warpAffine(horz_mask,M,(cols,rows))

    result = cv2.bitwise_and(thresh,cv2.bitwise_not(horz_mask))

隔离 1px 线(且仅 1px 线)的正确方法是什么?

在一般情况下,对于其他内核,这个问题是:如何找到图像中位于内核“适合内部”区域的所有像素(然后进行减法以获得我想要的结果)?

>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)