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