我有一个形状为(300,300,3)的图像,其中包含这些像素[255, 194, 7],[224, 255, 8],[230, 230, 230],[11, 102, 255]
。我想将此像素[230, 230, 230]
更改为[255,255,255]
。并将其他像素保留到[0,0,0]
。因此,我将应用numpy where
函数来切换像素。下面是代码:
import numpy
im = numpy.array([[[255, 194, 7],[224, 255, 8],[230, 230, 230],[11, 102, 255]]])
im[np.where((im == [230, 230, 230]).all(axis = 2))] = [255,255,255]
im[np.where((im != [255,255,255]).all(axis = 2))] = [0,0,0]
第一个代码运行良好,但是其中包含255
的所有像素(如[11, 102, 255]
)在第二行中都不会被翻转。并且图像保持不变。谁能告诉我我做错了什么?
答案 0 :(得分:0)
import numpy as np
im = np.array([[[255, 194, 7],[224, 255, 8],[230, 230, 230],[11, 102, 255]]])
喜欢吗?
制作一个遮罩并使用它来更改值。
>>> mask = im == 230
>>> im[mask] = 255
>>> im[np.logical_not(mask)] = 0
>>> im
=> array([[[ 0, 0, 0],
[ 0, 0, 0],
[255, 255, 255],
[ 0, 0, 0]]])
或使用numpy.where
>>> np.where(im==230, 255, 0)
=> array([[[ 0, 0, 0],
[ 0, 0, 0],
[255, 255, 255],
[ 0, 0, 0]]])
答案 1 :(得分:0)
尝试
np.array_equal(arr1, arr2)