自由空间中的激光线...以及如何检测线以进行进一步计算?

问题描述 投票:0回答:1

我想在不同的图像中找到激光束。

示例图片:

原版:

我找到了不同的方法,但不知何故它似乎不起作用。 我现在也使用了阈值:

logicM = image > Threshold
plt.figure()
plt.imshow(logicM, cmap='gray')
plt.axis('image')
plt.title(laserColor + ' band intensity over ' + str(Threshold))

识别线路。现在我想用虚线标记光束...然后绘制强度随高度(即像素)的变化...如何做到这一点?我就是想不通。

我发现了这个: 使用 OpenCV 进行垂直曲线检测 然后 在 OpenCV C++ 中画一条穿过斑点的曲线

两者都不起作用。

编辑:理论方程可以在这里找到,但是有一个简单的opencv解决方案吗?: https://mv.in.tum.de/_media/members/steger/publications/1996/icpr-96-steger.pdf

python opencv image-processing computer-vision
1个回答
0
投票

这可以实现隔离光束的技巧 - 可能还有一些工具可以获取折线近似而不是区域轮廓......

import cv2
from matplotlib import pyplot as plt

img = cv2.imread("hQiak.png")

# Mask in HSV space to keep only the vivid red color
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_red = (0, 100, 20)
upper_red = (10, 255, 255)
mask = cv2.inRange(hsv, lower_red, upper_red)

plt.imshow(mask, cmap="gray")

# Detect contours from mask
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Only keep the largest contour
contours = [max(contours, key=cv2.contourArea)]

cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
plt.figure(dpi=250)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.