【问题标题】:How to use numpy.where to change all pixels of an image?如何使用 numpy.where 更改图像的所有像素?
【发布时间】:2018-07-16 17:52:35
【问题描述】:

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

【问题讨论】:

  • 什么是im?向我们展示它是如何制作的。它是 PIL 图像,还是枕头图像还是.....?如果您可以向我们展示一个 5x5x3 示例和预期结果,这也会有所帮助。 minimal reproducible example
  • 使用 8 位无符号数据类型不是更好吗?
  • 在最后一行将all 更改为any

标签: python image numpy image-processing


【解决方案1】:
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]]])

【讨论】:

    【解决方案2】:

    试试

    np.array_equal(arr1, arr2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2015-12-18
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多