python opencv HSV测距仪创建轨迹栏

2023-12-07

我想使用 opencv 和 python 查找激光点的 HSV 值。我得到了代码http://opencv-srf.blogspot.com.au/2010/09/object-detection-using-color-seperation.html从这里开始,但它是用C++编写的,安装Visual Studio和OpenCV需要时间,所以我改变了Python中的代码

import cv2
import numpy as np

def callback(x):
pass

cap = cv2.VideoCapture(0)
cv2.namedWindow('image')

ilowH = 0
ihighH = 179

ilowS = 0
ihighS = 255
ilowV = 0
ihighV = 255

# create trackbars for color change
cv2.createTrackbar('lowH','image',ilowH,179,callback)
cv2.createTrackbar('highH','image',ihighH,179,callback)

cv2.createTrackbar('lowS','image',ilowS,255,callback)
cv2.createTrackbar('highS','image',ihighS,255,callback)

cv2.createTrackbar('lowV','image',ilowV,255,callback)
cv2.createTrackbar('highV','image',ihighV,255,callback)



while(1):
 ret, frame = cap.read()
 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
 cv2.imshow('hsv', hsv)
 lower_hsv = np.array([ilowH, ilowS, ilowV])
 higher_hsv = np.array([ihighH, ihighS, ihighV])
 mask = cv2.inRange(hsv, lower_hsv, higher_hsv)
 cv2.imshow('mask', mask)
 cv2.imshow('frame', frame)
 print ilowH, ilowS, ilowV
 if(cv2.waitKey(1) & 0xFF == ord('q')):
    break


cv2.destroyAllWindows()
cap.release()

但这段代码没有任何阈值。看来我创建的轨迹栏不会改变 ilowH 、ilowS、ilowV 的值。我通过在 while 循环内打印这些值来检查它。不对这些值进行阈值处理可能会出现什么问题,或者 python 中是否有更好的代码来查找 LASER 的 HSV 值。 谢谢,如有任何帮助,我们将不胜感激。


您可以使用以下命令获取轨迹栏值cv2.getTrackbarPos()。另请注意,有时它会使轨迹栏乱序,这很烦人,但至少它们有标签。

但是,我认为这些轨迹栏对于实时视频源来说效果不佳。存在很多冻结问题。你必须有一个超低的帧速率(对我有用cv2.waitKey(500)如果你真的想显示它)。这主要是由于轨迹条的吸力,而不是阈值操作,阈值操作并不慢。

您需要添加您的轨迹栏after您创建指定的窗口。然后,对于 while 循环,尝试:

while True:
    # grab the frame
    ret, frame = cap.read()

    # get trackbar positions
    ilowH = cv2.getTrackbarPos('lowH', 'image')
    ihighH = cv2.getTrackbarPos('highH', 'image')
    ilowS = cv2.getTrackbarPos('lowS', 'image')
    ihighS = cv2.getTrackbarPos('highS', 'image')
    ilowV = cv2.getTrackbarPos('lowV', 'image')
    ihighV = cv2.getTrackbarPos('highV', 'image')

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_hsv = np.array([ilowH, ilowS, ilowV])
    higher_hsv = np.array([ihighH, ihighS, ihighV])
    mask = cv2.inRange(hsv, lower_hsv, higher_hsv)

    frame = cv2.bitwise_and(frame, frame, mask=mask)

    # show thresholded image
    cv2.imshow('image', frame)
    k = cv2.waitKey(1000) & 0xFF # large wait time to remove freezing
    if k == 113 or k == 27:
        break

最后以cv2.destroyAllWindows()

顺便说一句,HSV 的最大 H 值为 180,而不是 179。

无耻插件:我碰巧刚刚完成一个项目 doing 正是这个,但是在图像上。你可以在 GitHub 上获取它here。有一个例子;尝试运行它,然后根据需要进行修改。它可以让您更改每个不同颜色空间内的颜色空间和阈值,并且它将打印您结束时的最终阈值。此外,它还会返回操作的输出图像供您使用。希望它对您有用!请随时通过 GitHub 发送有关该项目的任何问题或建议。

这是它运行的示例:

Example of cspaceThresh running

作为输出,它为您提供:

Colorspace: HSV 
Lower bound: [68.4, 0.0, 0.0] 
Upper bound: [180.0, 255.0, 255.0]

以及二值图像。我目前正在努力将其纳入网络应用程序中,但这可能需要几天的时间才能完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python opencv HSV测距仪创建轨迹栏 的相关文章

  • Python 脚本在开机时启动

    我正在制作一个简单的 python 脚本作为在后台运行的可执行文件运行 有没有办法让它在启动时运行 我知道我可以将可执行文件添加到启动目录 但这需要我根据我的机器对其进行硬编码 我希望它也能在其他机器上运行 Windows 和 ubuntu
  • 如何用if条件编写ini文件

    我想编写一个带有 if else 条件的 ini 文件 我用 python 中的 ConfigParser 解析它 如何在ini文件中使用if和else语句 如果我明白你在问什么 您可能想要做的是这样的 在 INI 文件中设置条件值 sec
  • 如何使用 Python 创建新的文本文件

    我正在练习用 python 管理 txt 文件 我一直在阅读有关它的内容 发现如果我尝试打开一个尚不存在的文件 它将在执行程序的同一目录中创建该文件 问题来了 当我尝试打开它时 出现以下错误 IOError Errno 2 没有这样的文件或
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • 如何使用 EMGU 计算 DFT 及其逆函数?

    如何计算图像的 DFT 使用 EMGU 显示它 然后计算反向值以返回原始图像 我将在这里回答我自己的问题 因为我花了一段时间才弄清楚 To test that it works here s an image and here s the
  • 如何使用 python 在白色背景上裁剪图像?

    我正在扫描旧照片 因此我有来自扫描仪的图像和白色背景 我的目的是拍照 去除白色背景 我怎样才能做到这一点 An example picture is the following 我的简单方法 import os import time fr
  • 为什么即使没有要打印的数据,打印命令也会换行

    只是打字print在 python 中只给出换行符 打字print3 x 中没有括号也会给出换行符 为什么 Because 文档 https docs python org 3 library functions html print sa
  • 识别相似图像的库

    我想确定 2 张图像的相似程度 图像可能已被缩放 裁剪等 因此简单的像素比较将不起作用 我环顾四周 有很多关于这个主题的学术论文 但他们没有发布他们的代码 那么 您知道有一个可以比较图像的已发布库 适用于 Linux 和 Windows 吗
  • 如何将 numpy rearray 的子集转换为连续数组?

    我有一个recarray来自读取 csv 文件 我有兴趣将列的子集转换为连续浮点数组 我想避免将它们转换为列表或将它们一一堆叠 我尝试了中的建议https stackoverflow com a 11792956 https stackov
  • 使用 Numpy 进行多维批量图像卷积

    在图像处理和分类网络中 一个常见的任务是输入图像与一些固定滤波器的卷积或互相关 例如 在卷积神经网络 CNN 中 这是一种极其常见的操作 我已将通用版本任务减少为 Given 一批 N 个图像 N H W D 和一组 K 个滤镜 K H W
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率
  • python 中的 exec 关键字有什么作用?

    code compile a 1 2
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • numpy:大量线段/点的快速规则间隔平均值

    我沿着一维线有许多 约 100 万个 不规则间隔的点 P 这些标记线段 这样 如果点是 0 x a x b x c x d 则线段从 0 gt x a x a gt x b x b gt x c x c gt x d 等 我还有每个段的 y
  • Django Admin DateTimeField 显示 24 小时格式时间

    我尝试了谷歌 但没有找到解决方案 在Django管理端 我正在显示开始日期 and end date随着时间的推移 但时间已在24 hr格式 我想显示它12 hr format class CompanyEvent models Model
  • 将 Python 3.5 项目转换为 Jython - UnicodeDecodeError: 'unicodeescape' 编解码器无法解码位置 4-10 中的字节:非法 Unicode 字符

    我的最终目的是将正在运行的 Python 项目转换为 Jython 解释器 因为将添加一些 java API Details 最新的 Jython 是 2 7 我的项目可以使用 Python 3 5 运行 所以我采取了以下方法 第一件事是利
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • Python - 设置 .pop() 行为

    这是我在 Python 集合中注意到的奇怪的事情 我读到集合中没有顺序 但它确实从 0 到 79 弹出较低的元素 后来从 79 到 127 弹出 它不再弹出较低的元素 只有在 128 到来之后 79 才会被弹出 为什么会这样呢 有没有其他方
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么

随机推荐