我是一名Python初学者,正在使用Python 3.6和OpenCV。我试图创建一个包含图像中所有颜色的RGB值列表。我可以使用cv2.imread读取一个像素的RGB值,然后使用image[px,px]来获取结果,它是一个NumPy数组。我想要的是图像中唯一颜色的RGB元组列表,但我不确定如何实现。希望得到任何帮助。
TIA
我是一名Python初学者,正在使用Python 3.6和OpenCV。我试图创建一个包含图像中所有颜色的RGB值列表。我可以使用cv2.imread读取一个像素的RGB值,然后使用image[px,px]来获取结果,它是一个NumPy数组。我想要的是图像中唯一颜色的RGB元组列表,但我不确定如何实现。希望得到任何帮助。
TIA
查看numpy的numpy.unique()函数:
import numpy as np
test = np.array([[255,233,200], [23,66,122], [0,0,123], [233,200,255], [23,66,122]])
print(np.unique(test, axis=0, return_counts = True))
>>> (array([[ 0, 0, 123],
[ 23, 66, 122],
[233, 200, 255],
[255, 233, 200]]), array([1, 2, 1, 1]))
你可以将RGB numpy数组收集到一个2D的numpy数组中,然后使用numpy.unique()函数和参数axis=0
来遍历其中的数组。可选参数return_counts=True
也会给出出现次数的数量。img = cv2.imread(path_to_img)
获取每个像素rgb的三维ndarray。
all_rgb_codes = img.reshape(-1, img.shape[-1])
将3D数组按一维展平成我们需要的2D数组。
unique_rgbs = np.unique(all_rgb_codes, axis=0)
根据我的答案获取唯一颜色。
在使用前请测试和评估该方法是否有效。
祝您编程愉快 :) - iR0Nic