加法和减法并不影响numpy数组的所有元素

2024-09-27 21:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对一个图像集进行标准化,其中包括向图像中的每个值添加一个常量

下面是一个示例,使用以下url处的图像: https://helpx.adobe.com/content/dam/help/en/stock/how-to/visual-reverse-image-search/jcr_content/main-pars/image/visual-reverse-image-search-v2_intro.jpg

import numpy as np
import cv2

img = cv2.imread("imagepath.jpeg")

arraymin = np.min(img)
print(arraymin)

arraymin的值是0。我尝试通过添加到整个数组,例如10。我尝试了3种不同的方法

img = img + 10
img += 10
img2 = np.add(img, 10)

这成功地为数组中的大多数值添加了10(总共30个),但是当我再次调用数组上的np.min时,最小值仍然是0

print(np.min(img))
print(np.min(img2))

我可以通过调用生成真值的0 in img来验证数组中是否有0

为什么在整个数组中加上10不会改变0值


Tags: 图像imageimportimgsearchnp数组content
2条回答

从该图像文件创建的数组的数据类型为uint8,最大值为255。向数组中添加正数时,某些元素将覆盖此值。特别是,任何像素的颜色通道的值为246,当您向其添加10时,该值将为0:

>>> np.array([246], dtype='uint8') + 10
array([0], dtype=uint8)

如果要对图像执行某些运算,请首先将其转换为更大的整数类型,或者通过调用float

>>> img = img.astype(float)

您还可以使用cv2.add添加2个图像,当值超过255时,将为255:

to_add = np.ones_like(img)*10
added = cv2.add(img, x)

相关问题 更多 >

    热门问题