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

最佳答案

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]]])

07-24 09:49
查看更多