我想检测HSV图像中的物体。但是我不断收到一个错误,,参数"%s"的预期Ptr<cv::UMat>

  • 本文关键字:错误 参数 一个 Ptr UMat cv 图像 HSV opencv
  • 更新时间 :
  • 英文 :


我试图创建一个跟踪栏窗口,并通过调整跟踪栏来获取图像的 HSV 值。 创建了一个蒙版,然后调整了跟踪栏以检测 HSV 图像的对象

在此处输入代码

def nothing(x):
pass
cv.namedWindow("Tracking")
cv.createTrackbar("LH","Tracking",0,255,nothing)
cv.createTrackbar("LS","Tracking",0,255,nothing)
cv.createTrackbar("LV","Tracking",0,255,nothing)
cv.createTrackbar("UH","Tracking",255,255,nothing)
cv.createTrackbar("US","Tracking",255,255,nothing)
cv.createTrackbar("UV","Tracking",255,255,nothing)
while True:
frame = cv.imread("C:/Users/acer/Desktop/insects/New folder/ins.jpg")
hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
l_h = cv.getTrackbarPos("LH","Tracking")
l_s = cv.getTrackbarPos("LS","Tracking")
l_v = cv.getTrackbarPos("LV","Tracking")
u_h = cv.getTrackbarPos("UH","Tracking")
u_s = cv.getTrackbarPos("US","Tracking")
u_v = cv.getTrackbarPos("UV","Tracking")
l_b = np.array([l_h,l_s,l_v])
u_b = np.array([u_h,u_s,u_v])
mask = (hsv,l_b,u_b)
res = cv.bitwise_and(frame,frame,mask=mask)
cv.imshow("frame",frame)
cv.imshow("mask",mask)
cv.imshow("res",res)
key = cv.waitKey(1)
if key == 27:
break
cv.destroyAllWindows()

您的代码存在一些问题:

1(您没有import陈述。您至少需要:

import cv2 as cv
import numpy as np

2( 您的缩进不正确。函数nothing()不应缩进。

3(您省略了呼叫inRange(),您需要:

mask = cv.inRange(hsv,l_b,u_b)

4(您已将Hue缩放到0..255范围内,而当它与uint8图像一起使用时,它实际上具有0..180的范围,因此360度显示为180度,小于uint8的255上限。

顺便说一下,在循环中做"循环不变">的事情是相当糟糕的做法 - 我的意思是你每毫秒点击磁盘并重新读取图像,重新解码JPEG并将其转换为HSV的部分。所有这一切都可以在循环外完成,然后在循环内完成,只需对HSV图像进行快速内存复制即可。

相关内容