如何使用numpy.where更改图像的所有像素?

时间:2018-07-16 17:52:36

标签: python image numpy image-processing

我有一个形状为(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])在第二行中都不会被翻转。并且图像保持不变。谁能告诉我我做错了什么?

2 个答案:

答案 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)