NumPy:如何检查tuple是否在一维NumPy数组中及图片取色报错解决
报错原因
- 初始化的
colors是一维空数组,调用np.append时会自动将输入的RGB三元组拆分为3个单独的数值存储,最终colors中仅存单个0-255的数值,而非完整的RGB颜色单元。 - numpy的
in运算符执行元素级比较时,长度为3的tuple与数组内单个数值维度不匹配,导致比较失败,触发弃用警告。
高效实现方案
完全无需编写Python循环,直接通过numpy向量化操作实现,大尺寸图片处理效率比原循环方案提升千倍以上:
from PIL import Image import numpy as np img = Image.open("bg.jpg").convert("RGB") # 转换为形状为(高度, 宽度, 3)的numpy数组 img_arr = np.array(img) # 重塑为(总像素数, 3)的二维数组,每一行对应一个RGB颜色 pixels_arr = img_arr.reshape(-1, 3) # 按行去重得到所有不重复的RGB颜色,输出为形状为(颜色总数, 3)的数组 unique_colors = np.unique(pixels_arr, axis=0)
如果需要转为Python原生tuple列表,可追加代码:
unique_color_list = [tuple(color) for color in unique_colors]
可选扩展
如果需要同时统计每种颜色的出现次数,可修改去重行代码为:
unique_colors, counts = np.unique(pixels_arr, axis=0, return_counts=True)
其中counts数组与unique_colors一一对应,存储对应颜色的出现频次。
内容的提问来源于stack exchange,提问作者Jumanji176
相关产品推荐
相关产品推荐

