下面的代码采用 opencv 图像,将其转换为 rgb,然后使用列表理解逐步完成将它们转换为十六进制的像素,并计算每种颜色的像素数。
如何使用列表理解来减少此代码,并解决底部的TypeError?
import cv2
bgr_img = cv2.imread(img_input)
rgb_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2RGB) # Hex starts with Red
该文件的形状 (300, 700, 3) 是 [[[ 90, 150, 140 ], [90 150 140], [90 150 140] ....
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 object
由于下面的响应,工作原理的较短代码是这样的:-
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使用列表理解?
阿波罗的战车
相关分类