如何正确使用Python测试rgcv值?

2024-04-26 12:18:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个使用颜色检测(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}$

Tags: fromimportnumpy颜色npmaskcv2hsv
1条回答
网友
1楼 · 发布于 2024-04-26 12:18:47

您只检测到蓝色的原因可能是因为您的detect_color函数中有一个错误。在

@staticmethod
def detect_color(detection_image):
    for k,v in ColourDetection.BOUNDARIES.iteritems():
    # . . .
        if amount_not_zero > 9000:
            return k
        else:
            return "No colour found"

请注意,在k,v对的第一次迭代中总是返回一个值。在

也就是说,要么是iteritems()给您的第一个k,要么是“找不到颜色”。在

相关问题 更多 >