下面的代码拍摄一个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,并使用列表推导逐步遍历像素,将其转换为十六进制,并计算每种颜色的像素数。怎么...