gpt4 book ai didi

c++ - 提取图像中的激光线(使用 OpenCV)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:42 29 4
gpt4 key购买 nike

我有一张激光线的图片,我想从图像中提取那条线。

enter image description here

由于激光线是红色的,我取图像的红色 channel ,然后在每一行中搜索最高强度:

enter image description here

现在的问题是,还有一些不属于激光线的点(如果你放大第二张图,你可以看到这些点)。

有没有人知道接下来的步骤(删除单个点并提取线)?

这是另一种检测线的方法:首先我用内核模糊了那条“黑白”线,然后我把那条模糊线细化(骨架)成一条细线,然后我应用了一个 OpenCV 函数来检测这条线。结果如下图所示:enter image description here

新:

现在我遇到了另一个更困难的情况。我必须提取绿色激光。
这里的问题是激光线的颜色范围较宽且不断变化。
在激光线的某些部分,像素只有高绿色成分,而在其他部分,像素也有高蓝色成分。 enter image description here

最佳答案

获取每一行中的最大值将始终输出一个值,而不是在值不够高时忽略。也可以考虑使用阈值,以便您可以丢弃不够高的阈值。

但是,这根本不是一种非常有效的方法。更好更简单的解决方案是使用 OpenCV 函数 inRange() ;在所有三个 channel 中定义红色的下限和上限,这将返回一个带有白色像素的二值图像,其中图像强度在该 BGR 范围内。

这是在 python 中,但它完成了工作,应该很容易看出如何使用该函数:

import cv2
import numpy as np

img = cv2.imread('image.png')
lowerb = np.array([0, 0, 120])
upperb = np.array([100, 100, 255])
red_line = cv2.inRange(img, lowerb, upperb)

cv2.imshow('red', red_line)
cv2.waitKey(0)

这会产生输出: Red line binary iamge

这可以通过寻找轮廓或其他方法将点变成漂亮的曲线来进一步处理。

关于c++ - 提取图像中的激光线(使用 OpenCV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44389702/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com