我想使用 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 值。
谢谢,如有任何帮助,我们将不胜感激。