簡體   English   中英

具有多個元素的數組的真值是模棱兩可的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM