使用numpy数组的真值

时间:2018-03-29 14:14:13

标签: python numpy image-processing

我正在努力改变 灰度图像的亮度。 但是,我在使用numpy数组时遇到问题 我试图在每个像素值上加100 并在值超过255时将其设置为255

import numpy as np
import matplotlib.pyplot as plt
from scipy import misc

for i in range(0, img.shape[0]):
    for j in range(0, img.shape[1]):
        im2[i,j] = img[i,j] + 100
        if im2[i,j] > 255:
            im2[i,j] = 255     

plt.imshow(im2, cmap = 'gray')
plt.show()

这些是代码,我收到一条错误消息

if im2[i,j] > 255:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

您可以简单地使用numpy clip功能:

im2 = np.clip(img + 100, 0, 255)

说明:
第一个参数是要剪辑的数组,在您的情况下是img,每个元素都添加了100。第二个参数是minnimum值,应为0.第三个参数是最大值,在您的情况下为255。

答案 1 :(得分:0)

当您考虑错误The truth value of an array with more than one element is ambiguous时,这似乎是合乎逻辑的。

你试图说我的阵列(说[1,2,3])是否优于255?它的长度是否超过255?你想知道第一个元素是否优越吗?第二 ?整个阵列的总和?所有整个数组的根平方?

如果我正确地按照您的评论,您想要做的是:

for idx in range(len(im2[i, j])):
    if im2[i, j][idx] > 255:
        im2[i, j][idx] = 255

答案 2 :(得分:0)

如果需要,可以通过以下方式简化代码:

im2 = (np.asarray (img) + 100)
im2[im2>255] = 255

第一行会将img转换为numpy array(如果img为列表)并在每个元素中添加255。

如果im2大于255,那么该行将替换255的值。