python - 检测由多个斑点形成的线条
问题描述
红色圆圈部分是我想要检测的对齐斑点(因为这些斑点来自嘈杂的背景,我想摆脱它们),所以我可以在 opencv 中创建一个用于修复的蒙版并摆脱这些强烈的噪音。
现在我只有一种方法可以从第一张图像中检测对齐的斑点。所以我连接、膨胀、腐蚀并做了霍夫检测。
kernel = np.ones((1,10), np.uint8)
c_im = cv2.morphologyEx(invthresh, cv2.MORPH_CLOSE,kernel)
d_im = cv2.dilate(c_im, kernel, iterations=2)
c2_im = cv2.morphologyEx(d_im, cv2.MORPH_CLOSE,kernel)
e_im = cv2.erode(c2_im, kernel, iterations=2)
image_l = e_im
#line detection
rho = 1
theta = np.pi / 180
threshold = 15
min_line_length = 150
max_line_gap = 30
line_image = np.copy(image_l) * 0
# Run Hough
lines = cv2.HoughLinesP(image_l, rho, theta, threshold, np.array([]),
min_line_length, max_line_gap)
points = []
for line in lines:
for x1, y1, x2, y2 in line:
points.append(((x1 + 0.0, y1 + 0.0), (x2 + 0.0, y2 + 0.0)))
cv2.line(line_image, (x1, y1), (x2, y2), (255, 0, 0), 5)
lines_edges = cv2.addWeighted(image_l, 0.8, line_image, 1, 0)
ret2, lines_mask = cv2.threshold(lines_edges,254,255,cv2.THRESH_BINARY)
cv2.imshow('lines_mask',lines_mask)
这是结果图像 , 在我的情况下,我可以将其用作 Mask_1 并将其与原始灰度图像中的另一个阈值矩阵相乘(获得较暗的像素)。
但是我的方法有几个问题。
有时,斑点的密度不足以让我进行扩张和侵蚀(如底部图像)。获得我想要的结果的更通用的方法是什么?
(如果 Q1 没有足够好的解决方案,那么我至少想检测图像 1 中穿过边界的底部 2 条圆圈线,就像不在中间但触及图像的边界)检查一条线是否越过边界的好方法?(就像结果 2 一样,我不想要我划掉的部分。区分这些错误检测部分的方法是它们是否接触两端的边界)
如果我想检测图像中的蓝色圆圈部分(因为我想从我的面具中消除它们),有什么好的方法来执行它?形状比那些斑点大。
任何提示表示赞赏。非常感谢!
解决方案
推荐阅读
- javascript - 为每个步骤应用按钮,或延迟 javascript 递归
- c++ - 提高 OS windows C++ portscanner 的性能
- git - 使用 Git 处理开源项目和其他类型项目的合并冲突的最佳方法
- office365 - 微软图形 | 如何允许应用程序仅访问某些用户或邮箱而不是全部?
- java - 如何通过一次调用函数来重构代码?
- logstash - Grok 模式在 logstash 中解析它并索引到 Elasticsearch
- mysql - 如何从两个表中减少
- css - CSS/Bootstrap v3 - 对齐搜索按钮和输入字段(Drupal 中的 Bootstrap 3)
- web - Heroku Go Web 应用程序崩溃
- php - PHP如何从具有唯一随机结果的数组中创建子数组?