python - 如何区分使用 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()
任何链接/建议/评论/批评都非常感谢改进图像处理中的线检测。
解决方案
通过查看右上角的小地图,我假设此线条图案继续在图像中显示的左侧和右侧。我认为找到一个健壮的方法并不容易,但这里有一些想法:
- 轻微模糊 -> 二进制图像阈值 -> 骨架化 -> 轻微膨胀 -> HoughLinesP -> 合并具有相似角度和距离的线段。示例: 如何在 HoughLinesP 之后合并行?
- 与上面相同,但改用 HoughLines -> 查找交点 -> 在每组交点中查找中心点。示例: 查找使用 houghlines opencv 绘制的两条线的交点
- 轻微模糊 -> 二进制图像的阈值 -> 一些已建立的角点检测算法 -> 找到一些方法来消除误报。示例: https ://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html
- 轻微模糊 -> 二进制图像的阈值 -> 使用与线段端点形状相对应的自定义箭头形内核进行侵蚀 -> 找到连接的组件 -> 找到与侵蚀结果相对应的每个组件的最高点使用顶部箭头形状的内核和对应于使用底部箭头形状内核的侵蚀结果的每个组件的最低点。我找不到这个的例子。
就个人而言,我会首先尝试使用自定义箭头形内核的侵蚀方法。乍一看,我认为它可能是四种方法中最简单、最健壮的一种。
推荐阅读
- laravel - 播种用户时如何创建默认登录用户帐户?
- java - Why the stale connection check is not 100% reliable in apache httpclient connectionPool
- javascript - 对象解释数组的Javascript扩展符号和深拷贝
- php - error.log 文件中未定义的索引 cookie 错误。我该如何解决这个问题?
- ios - 如何从 UIView 创建特定大小的图像
- jbpm - Business Central 中的远程服务器不可用
- wordpress - WordPress。为用户和其他内容添加分类
- kubernetes - 如何设置 Harbor 的 ssl issuer
- javascript - 为什么 Angular router.navigate() 不导航?
- express - 在每个主要浏览器上通过 express.js 在 localhost 上设置 cookie 失败