python - 从图像 RGB 值列表中删除 [255,255,255] 条目

标签 python list image

我将图像(如下所示) 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)

enter image description here

最佳答案

问题是 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/

相关文章:

java - 如何显示来自 HTTP Web 服务器的图像?

Python:动态导入模块内容

python - 使用 Python 图像库进行高级裁剪

python - 使用逻辑运算符索引 numpy 数组

Java Arraylist 程序测试失败

Jquery移动: dynamically added list with nested item not opening inner list properly

python - 使用列表在 python 中进行测验

python - 给出错误答案的最小硬币变化类

c - 重复图像检测算法?

Javascript 随机图像旋转器调整图像大小?