我需要检测图像是否被卷曲。所以我使用了一个python代码,它来自另一个stackoverflow帖子:
import numpy as np
from PIL import Image, ImageChops
im = Image.open('img/low2.jpg')
im2 = im.transform(im.size, Image.AFFINE, (1,0,1,0,1,1))
im3 = ImageChops.subtract(im, im2)
im3 = np.asarray(im3)
im3 = np.sum(im3,axis=0)[:-1]
mean = np.mean(im3)
peak_spacing = np.diff([i for i,v in enumerate(im3) if v > mean*2])
mean_spacing = np.mean(peak_spacing)
std_spacing = np.std(peak_spacing)
我得到了这个错误:
File "pixelated.py", line 11, in peak_spacing = np.diff([i for i,v in enumerate(im3) if v > mean*2]) ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我该怎么解决这个问题?我是Python的新手,请告诉我任何想法或帮助。在
问题是
v > mean*2
,这导致了一个布尔值数组。在对于
if
,此类数组的布尔值不明确。正如错误文本所建议的,您需要告诉Python,是否所有值都应该是True
:或者如果其中任何一个足够:
^{pr2}$看起来}。在
v
是一个numpy数组。当你比较一个numpy数组和一些东西时,会生成一个新的布尔数组。这意味着v > m*2
生成一个数组(例如[True, False, False, ... True]
)。从这样的列表中获取单个布尔值并将其用于if
表达式是不可能的。因此,根据您的代码逻辑,尝试使用np.any(v > m*2)
或{同样,这段代码似乎能很好地处理灰度图像。但在以下RGB中失败。 所以,试着把图像转换成灰度
就在图像初始化之后
相关问题 更多 >
编程相关推荐