繁体   English   中英

我的 Python 脚本读取错误的 RGB 值 - OpenCV

[英]My Python script reads wrong RGB values - OpenCV

我正在尝试编写代码以从像素的 HSV 值中识别 colors 。 颜色识别效果很好,但有时它会得到错误的值(我已经在情节中检查过它们)

我正在使用的图像: https://www.pyimagesearch.com/wp-content/uploads/2016/01/shapes_and_colors.jpg

这是我的字典,在 HSV 颜色空间中的值为 colors:

# colors in Hue Saturation Value color space
colors = {
    'red': np.array([0, 100, 100]),
    'orange': np.array([30, 100, 100]),
    'yellow': np.array([60, 100, 100]),
    'green': np.array([120, 100, 100]),
    'blue': np.array([240, 100, 100]),
    'violet': np.array([270, 100, 100]),
    'pink': np.array([330, 100, 100]),
}

颜色识别 function 返回字符串颜色名称(rgb_to_hsv 工作良好的值是正确的 - 我在http://colorizer.org/上检查过)

def colorRecognition(pixelRGB):
    pixelHSV = rgb_to_hsv(pixelRGB)
    if pixelHSV[1] < 10:
        if pixelHSV[2] < 12:
            return 'black'
        elif pixelHSV[2] > 80:
            return 'white'
        else:
            return 'gray'
    else:
        diff = np.empty(shape=(0, 2), dtype=([('values', np.dtype(int)), ('names', type(colors.keys()))]))

        for name, value in colors.items():
            abs_diff = abs(int(pixelHSV[0]) - int(value[0]))
            diff = np.append(diff, np.array([(abs_diff, name)], dtype=diff.dtype))
        color = np.sort(diff)[0][1]
        if pixelHSV[2] < 10:
            return 'black'
        else:
            return color

脚本的核心:

img = cv.imread('img/shapes_and_colors.jpg')
rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)
gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
blurred = cv.GaussianBlur(gray, (5, 5), 0)
thresh = cv.threshold(blurred, 70, 255, cv.THRESH_BINARY)[1]

cnts = cv.findContours(thresh.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)

points = np.empty(shape=(0, 4))

for c in cnts:
    M = cv.moments(c)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])

    points = np.append(points, [[cX, cY, rgb[cX, cY], colorRecognition(rgb[cX, cY])]], axis=0)

Output 的脚本:

https://i.stack.imgur.com/yP2hp.jpg <- 带有数字形状和识别的图像 colors

1.X: 239, Y:421
color: blue
rbg: [  0 130 224]
hsv: [205, 100, 87]

2.X: 344, Y:451
color: gray
rbg: [35 34 32]
hsv: [39, 8, 13]

3.X: 433, Y:398
color: red
rbg: [43 37 37]
hsv: [0, 13, 16]

4.X: 155, Y:377
color: black
rbg: [20 16 15]
hsv: [12, 25, 7]

5.X: 395, Y:330
color: orange
rbg: [255 157  94]
hsv: [23, 63, 100]

6.X: 220, Y:328
color: blue
rbg: [22 25 30]
hsv: [217, 26, 11]

7.X: 291, Y:312
color: yellow
rbg: [229 214  73]
hsv: [54, 68, 89]

8.X: 491, Y:263
color: gray
rbg: [44 44 42]
hsv: [60, 4, 17]

9.X: 340, Y:244
color: green
rbg: [32 37 33]
hsv: [132, 13, 14]

10.X: 410, Y:229
color: blue
rbg: [  1 142 234]
hsv: [203, 99, 91]

11.X: 144, Y:229
color: black
rbg: [19 18 16]
hsv: [40, 15, 7]

12.X: 338, Y:182
color: yellow
rbg: [36 35 31]
hsv: [48, 13, 14]

13.X: 199, Y:171
color: yellow
rbg: [244 230  81]
hsv: [54, 66, 95]

14.X: 266, Y:174
color: yellow
rbg: [234 218  81]
hsv: [53, 65, 91]

15.X: 238, Y:98
color: yellow
rbg: [250 246  95]
hsv: [58, 62, 98]

16.X: 132, Y:111
color: yellow
rbg: [234 218  71]
hsv: [54, 69, 91]

17.X: 365, Y:102
color: gray
rbg: [37 36 34]
hsv: [39, 8, 14]

数组可以使用坐标 Y,X (row,column) 而不是 X,Y – furas

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM