我试图创建一个跟踪栏窗口,并通过调整跟踪栏来获取图像的 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图像进行快速内存复制即可。