我目前正在做一个使用颜色检测(OpenCV)的项目。我对Python和OpenCV还很陌生,所以我不能让它完全按照我想要的方式工作。在
我有一个类颜色检测(有什么建议微调HSV值?)它包含静态方法detect_color,我们使用它来检测某个颜色。这里是:
#!/usr/bin/env python
import cv2
import numpy as np
class ColourDetection(object):
#HSV 180-255-255 max values openCV (recalculate from GIMP)
#these need adjusting
BOUNDARIES = {
'red': ([170, 160, 60], [180, 255, 255]),
'blue': ([110, 50, 50], [130, 255, 255]),
'green': ([38, 50, 50], [75, 255, 255]),
'yellow':([103, 50, 50], [145, 255, 255])
}
@staticmethod
def detect_color(detection_image):
img_hsv = cv2.cvtColor(detection_image, cv2.COLOR_BGR2HSV)
#loop for all defined colours
for k,v in ColourDetection.BOUNDARIES.iteritems():
#convert to numpy arrays
lower_color = np.array(v[0])
upper_color = np.array(v[1])
#create mask from colour bounds
mask = cv2.inRange(img_hsv, lower_color, upper_color)
#count found colour pixels
amount_not_zero = cv2.countNonZero(mask)
if amount_not_zero > 9000:
return k
else:
return "No colour found"
前两个测试工作正常。但是,最后一个测试应该使用这些RGB值返回红色。看来我需要对HSV值进行微调。有人能帮我吗?在
^{pr2}$
您只检测到蓝色的原因可能是因为您的
detect_color
函数中有一个错误。在请注意,在k,v对的第一次迭代中总是返回一个值。在
也就是说,要么是iteritems()给您的第一个
k
,要么是“找不到颜色”。在相关问题 更多 >
编程相关推荐