opencv bgr的列表理解为调色板的十六进制合并。 TypeError:无法解压缩不可迭代的numpy.uint8对象

问题描述 投票:0回答:1

下面的代码拍摄一个opencv图像,将其转换为rgb,并使用列表推导逐步遍历像素,将其转换为十六进制,并计算每种颜色的像素数。

如何使用列表理解来减少此代码,并在底部解决TypeError?

import cv2
bgr_img = cv2.imread(img_input)
rgb_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2RGB) # Hex starts with Red

文件的形状为([[90,150,140],[90 150 140],[90 150 140] ....]的形状(300,700,3)>]

palette = dict()
for i in img:
    for j in i:
        colour_hex = [f"#{a:02x}{b:02x}{c:02}" for a,b,c in j]
        if colour_hex in palette:
            palette[colour_hex] +=1
        else:
            palette[colour_hex] = 1

因此字典包含十六进制颜色的值键对以及该十六进制颜色图像中每个像素的数量。

读取错误消息

TypeError:无法解包不可迭代的numpy.uint8对象

感谢下面的回复,更短的代码是这样的:-

import cv2
bgr_img = cv2.imread(img_input)
rgb_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2RGB) # Hex starts with Red
palette = dict()
for i in img:
    for j in i:
        colour_hex = f"#{:02x}{:02x}{:02x}".format(*j)
        if colour_hex in palette:
            palette[colour_hex] +=1
        else:
            palette[colour_hex] = 1

可以将其缩短吗? /更多使用列表理解的Pythonic?

下面的代码拍摄一个opencv图像,将其转换为rgb,并使用列表推导逐步遍历像素,将其转换为十六进制,并计算每种颜色的像素数。怎么...

python opencv hex list-comprehension rgb
1个回答
1
投票
© www.soinside.com 2019 - 2024. All rights reserved.