我想从一个图像中得到一些不等于指定值的像素值。但是我想以RGB格式而不是以长矢量的形式得到。我该怎么做呢?
import cv2
import numpy as np
image = cv2.imread('image.jpg')
sought = [36,255,12]
result = image[image!=sought]
import sys
np.set_printoptions(threshold=sys.maxsize)
print(result)
我得到了:
[20 103 75 21 98 70 16 100 72 18 101 73 19 97 69 15 95 66
15 95 67 13 101 73 19 104 77 21 96 69 13 94 65 8 99 69
14 98 68 13 94 63 10 88 66 24 92 69 24 92 67 23 93 67
13 93 67 13 93 67 13 97 72 16 96 70 16 93 66 15 96 68
.....
99 69 14 96 66 11 91 67 25 88 65 20 92 68 14 96 69 18
96 70 16 91 64 13 95 67 13 92 64 10 90 63]
但我想要这样的东西:
[[[R,G,B], [R,G,B], [R,G,B], [R,G,B]],
......
[[R,G,B], [R,G,B], [R,G,B], [R,G,B]]]
我错过了什么?
2条答案
按热度按时间w6lpcovy1#
如果所需的输出是像素列表,则在按分量进行比较之后,您必须检查在具有
.any(axis = 2)
的R、G或B中的任何一个上哪些像素不同:输出形式:
weylhg0b2#
使用
result = image[image != sought]
时,您会丢失image
的形状。解决方法是获取一个遮罩(image != sought
),然后使用该遮罩处理图像(例如,使用np.where
)生成一些数据:
计算掩码(注意
keepdims=True
对于np.where
工作起来更容易):情节: