我喜歡在線提取和顯示影像主色的功能。為了節省時間,我只想迭代非零像素而不是整個影像。但是我更改函式的方式會引發錯誤:
if row != [0,0,0]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
這是修改后的代碼:
def dominantColor(image) :
from matplotlib.pyplot import imshow, show
from scipy.cluster.vq import whiten
from scipy.cluster.vq import kmeans
import pandas as pd
r = []
g = []
b = []
for row in image :
if row != [0,0,0]: #the part I added to the original code
print(row)
for temp_r, temp_g, temp_b in row:
r.append(temp_r)
g.append(temp_g)
b.append(temp_b)
image_df = pd.DataFrame({'red': r, 'green': g, 'blue': b})
image_df['scaled_color_red'] = whiten(image_df['red'])
image_df['scaled_color_blue'] = whiten(image_df['blue'])
image_df['scaled_color_green'] = whiten(image_df['green'])
cluster_centers, _ = kmeans(image_df[['scaled_color_red','scaled_color_blue','scaled_color_green']], 3)
dominant_colors = []
red_std, green_std, blue_std = image_df[['red','green','blue']].std()
for cluster_center in cluster_centers:
red_scaled, green_scaled, blue_scaled = cluster_center
dominant_colors.append((
red_scaled * red_std / 255,
green_scaled * green_std / 255,
blue_scaled * blue_std / 255
))
imshow([dominant_colors])
show()
return dominant_colors
我應該如何糾正我的迭代回圈以消除錯誤并且只有我的影像的非零值?(注意:影像實際上是mask * original_image)
uj5u.com熱心網友回復:
.all()如果您希望共同比較陣列元素,則需要在比較之后添加方法。所以if (row == [0,0,0]).all()。
import numpy as np
image = np.array([
[0, 0, 0],
[1, 0, 0],
[0, 0, 1],
])
for row in image:
if not (row == [0, 0, 0]).all():
print(row)
結果:
[1 0 0]
[0 0 1]
uj5u.com熱心網友回復:
如果我正確理解您的代碼,答案就在您發布的錯誤日志中:
if row != [0,0,0]:
ValueError:具有多個元素的陣列的真值不明確。使用 a.any() 或 a.all()
因此,該any函式檢查行中的任何元素是否被評估為真:
for row in image :
if any(row): #enter the if block if any element is not 0
print(row)
for temp_r, temp_g, temp_b in row:
r.append(temp_r)
g.append(temp_g)
b.append(temp_b)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462023.html
