Python 太多值无法解压缩(读取图像形状时)
我正在尝试运行以下代码段:Python 太多值无法解压缩(读取图像形状时),python,numpy,scipy,image-classification,python-imageio,Python,Numpy,Scipy,Image Classification,Python Imageio,我正在尝试运行以下代码段: from scipy.stats import wasserstein_distance from imageio import imread import numpy as np def get_histogram(img): h, w = img.shape hist = [0.0] * 256 for i in range(h): for j in range(w): hist[img[i, j]] += 1 return
from scipy.stats import wasserstein_distance
from imageio import imread
import numpy as np
def get_histogram(img):
h, w = img.shape
hist = [0.0] * 256
for i in range(h):
for j in range(w):
hist[img[i, j]] += 1
return np.array(hist) / (h * w)
a = imread("./IMG_4835.jpg")
b = imread("./IMG_4836.jpg")
a_hist = get_histogram(a)
b_hist = get_histogram(b)
dist = wasserstein_distance(a_hist, b_hist)
print(dist)
但我得到一个错误:
h, w = img.shape
b = imread('b.jpg', mode='L')
使用的原始代码:
from scipy.ndimage import imread
要读取图像文件,但由于无法导入,我使用了另一个库中的imread。这可能与错误有关吗?
h,w=img.shape[:2]
应该可以解决问题。shape内部的值是多少?如果图像有3个颜色通道,形状将是[w,h,ch]
(或[h,w,ch]
,或其他排列,您应该检查),因此您有3个值要解压缩。您能看到更新的代码吗?原始版本使用“L”模式,但模式参数在从openCV或imageio读取的imread中无效@pietro此函数假定img
是一个值为0到255(uint8
dtype?)的二维数组。它将在具有3d形状的彩色图像上失败。使用前请验证形状和数据类型。打印(img.shape,img.dtype)
的结果是什么<代码>L模式对于jpeg意味着,但是在返回的numpy数组中是否正确设置了该模式?(4032、3024、3)uint8@Pietro当前,我没有在代码中将图像更改为灰度。由于imread中没有来自ImageIOT的L模式,因此它给了我TypeError:只有整数标量数组可以转换为标量索引hist[img[i,j]+=1
:(错误其实很清楚,试试hist[int(img[i,j]))
。已经尝试过了。但是在同一行上会出现另一个错误,然后TypeError:只有size-1数组可以转换为Python标量
from scipy.ndimage import imread