首页 > 解决方案 > 如何区分使用 python 进行 CV2 图像处理中的行?

问题描述

我正在将 python 中的骨骼公式图像处理器作为化学项目工作。它仍处于早期阶段,但我被一个问题难住了。当我运行图像处理时,单条线被计为多条;因为从单个笔线拾取多条线。因此,我需要一种区分线条的方法,并使其每条实际的笔线都注册一条线,这样我就可以准确地将其算作 CH3 组,就像它在骨骼公式中一样。

这是我当前的代码:

import cv2
import numpy as np
import math
 
 
image1 = cv2.imread('test2.jpeg')
gray = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY)
canimg = cv2.Canny(gray, 50, 200)
 
lines = cv2.HoughLinesP(canimg, 1, np.pi/180.0, 80, np.array ([]), 70, 20)
N = lines.shape[0]
 
for i in range(N):
    x1 = lines[i][0][0]
    y1 = lines[i][0][1]    
    x2 = lines[i][0][2]
    y2 = lines[i][0][3]    
    cv2.line(image1,(x1,y1),(x2,y2),(255,0,0),2)

cv2.imshow('Lines Detected',image1)
cv2.imshow("Canny Detection", canimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

如我的问题所示,请参阅随附的图像。 关闭其中一条线 - 看看多条线是如何注册的 - 我需要一个系统来计算每条实际笔线只有一条线。

任何链接/建议/评论/批评都非常感谢改进图像处理中的线检测。

标签: pythonimage-processingcv2chemistrystraight-line-detection

解决方案


通过查看右上角的小地图,我假设此线条图案继续在图像中显示的左侧和右侧。我认为找到一个健壮的方法并不容易,但这里有一些想法:

就个人而言,我会首先尝试使用自定义箭头形内核的侵蚀方法。乍一看,我认为它可能是四种方法中最简单、最健壮的一种。


推荐阅读