【问题标题】:OpenCV Python measuring distance with HoughLinesP() algorithm to determine water levelOpenCV Python 使用 HoughLinesP() 算法测量距离以确定水位
【发布时间】:2019-08-13 15:41:11
【问题描述】:

我正在尝试使用 OpenCV 和 Python 测量玻璃通道中的水位。我决定在选定的 ROI 中使用 HaughLines 并找到所述线的中点,这样我就可以计算出我想要的线之间的差异,并将其乘以我稍后会得到的设定参考大小。到目前为止,我发现线条的部分如下所示:

import cv2
import numpy as np

def midpoint(ptA, ptB, ptC, ptD):
        return ((ptA + ptC) * 0.5, (ptB + ptD) * 0.5)

img = cv2.imread("b2924.JPG")
img = cv2.resize(img, None, fx=3/10, fy=3/10)

r = cv2.selectROI("main", img, False, False)
cropped = img[r[1]:(r[1]+r[3]), r[0]:(r[0]+r[2])]
cv2.destroyWindow("main")

imgray = cv2.cvtColor(cropped, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(imgray, 35, 75)

lines = cv2.HoughLinesP(edges, 1, np.pi/180, 75, maxLineGap=1000)

midPoint = []

for line in lines:
    x1, y1, x2, y2 = line[0]
    cv2.line(cropped, (x1, y1), (x2, y2), (0, 0, 255), 1)
    mP = midpoint(x1, y1, x2, y2)
    midPoint.append(mP)

midPoint.sort(key = lambda x: x[1])

img[r[1]:(r[1]+r[3]), r[0]:(r[0]+r[2])] = cropped

print(lines)
print(midPoint)

cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

根据我选择的图像和 ROI,我发现结果不一致。图像示例以及我选择 ROI 的位置:

请注意,通道的底部从胶带到达的地方开始。看起来我几乎找不到那条确切的线,因为它在底部有多么嘈杂。现在,这些没有形态的阈值似乎给出了更好的结果。我也尝试使用sobel 导数而不是canny,但结果更差。

甚至有可能在这种环境下获得精确的测量结果吗?是编码问题还是改变我拍照的方式或两者兼而有之?将来我可能需要在剧烈湍流期间绘制水剖面图,我是否应该为此简单地远离 OpenCV,因为噪音太大?任何帮助表示赞赏。

【问题讨论】:

  • 也许是一个实用的评论,而不是计算评论:如果你可以调整你的实验设置,你可以让你的生活更轻松:将繁文缛节垂直贴在腔室后面的几个地方。这将允许您通过对红色通道设置阈值并使用水产生的锋利边缘来获取高度数据(请参见框左侧标记您的投资回报率的垂直光束)
  • 是的,我在想类似的事情,可能会在底座上贴上深色胶带,将其变成锐利的水平边缘,并从更近的距离拍摄照片。也许我应该做这些然后更新帖子,因为看起来我无法摆脱噪音并同时保持水的边缘。 @翘曲

标签: python opencv image-processing hough-transform houghlinesp


【解决方案1】:

我不会用这种设置投资任何图像处理。

如果您坚持图像处理(如果您只对几个位置的水平仪感兴趣,那么使用传统水平传感器可能会更好)

在脸盆背面添加 LED 面板或任何其他类型的均匀背景照明。在水中加入染料以获得一些对比。 摆脱窗户反射。清洁玻璃。 或者使背景变暗,并在水中添加一些东西,使其杂散光或荧光。

您还可以添加漂浮在表面上的东西,这些东西要么是逆向反射的,要么是自发光的。这样您就可以在图像中轻松检测到明亮的表面水平指示器。

【讨论】:

  • 水是恒定流动的,它是一个相当大的盆地,所以我不得不不断地向它注入染料。这里的水也很硬,所以玻璃不能真正变得那么干净。对于反射、LED 和反射器;我认为他们完全超出了我们的预算。不过感谢您的回复,我会看看我是否能得到至少其中一件。 @小猪
猜你喜欢
  • 2020-01-17
  • 1970-01-01
  • 2020-11-16
  • 2018-09-14
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
相关资源
最近更新 更多