我将图像(如下所示) reshape 为像素列表,现在我想删除黑色像素(值为 [255,255,255]
)。有什么有效的方法吗?
我尝试使用IM[IM != [255,255,255]]
,我得到了一个值列表,而不是一个值三元组列表。这是我正在使用的代码:
import cv2
import numpy as np
IM = cv2.imread('Test_image.png')
image = cv2.cvtColor(IM, cv2.COLOR_BGR2RGB)
# reshape the image to be a list of pixels
image_vec = np.array(image.reshape((image.shape[0] * image.shape[1], 3)))
image_clean = image_vec[image_vec != [255,255,255]]
print(image_clean)
最佳答案
问题是 numpy 自动进行数组广播,因此使用 IM != [255,255,255]
会将每个元素与 [255,255,255]
进行比较,并返回一个 bool 数组与图像数据的形状相同。使用它作为掩码将返回一维数组的值。
解决此问题的一个简单方法是使用 np.all:
image_vec[~ np.all(image_vec == 255, axis=-1)]
关于python - 从图像 RGB 值列表中删除 [255,255,255] 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74533331/