[英]The truth value of an array with more than one element is ambiguous error? python
[英]The truth value of an array with more than one element is ambiguous Python error
我需要檢測圖像是否被膠版化。 所以我使用了一個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)
我收到此錯誤:
文件“ pixelated.py”,第11行,peak_spacing = np.diff([如果v>均值* 2,[i表示枚舉(im3)中的i,v])ValueError:具有多個元素的數組的真值是曖昧。 使用a.any()或a.all()
我怎樣才能解決這個問題? 我是Python的新手,請給我任何想法或幫助。
問題是v > mean*2
導致布爾值數組。
這種數組的布爾值對於if
是不明確的。 正如錯誤文本所建議的那樣,您需要告訴Python是否所有值都應為True
:
(v > mean * 2).all()
或者其中任何一個就足夠了:
(v > mean * 2).any()
看起來v
是一個numpy數組。 當您將numpy數組與某些內容進行比較時,將生成一個新的布爾數組。 這意味着v > m*2
生成一個數組(例如[True, False, False, ... True]
)。 從這樣的列表中獲取單個布爾值並在if
表達式中使用它是不可能的。 因此,根據您的代碼邏輯,嘗試使用np.any(v > m*2)
或np.all(v > m*2)
。
同樣,該代碼似乎也可以用於灰度圖像。 但是使用RGB不能以下列方式失敗。 因此,嘗試將圖像轉換為灰度
im = im.convert("L")
在圖像初始化之后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.