ValueError:Python中拆分值过多

-1 投票
1 回答
5934 浏览
提问于 2025-04-18 13:31

我在运行下面的脚本时遇到了一个错误:

Traceback (most recent call last): 
File "C:/Users/me/PycharmProjects/MySmplePythonApplication/src/Test2.py", line 22, in <module> print smooth(array) 
File "C:/Users/me/PycharmProjects/MySmplePythonApplication/src/Test2.py", line 10, in smooth dx, dy= array.shape 
ValueError: too many values to unpack

代码:

import math
import numpy as np
from PIL import Image

array = np.array(Image.open('noisy.tif'))

#Apply a 3x3 mean filter to my image array.

def smooth(array, window=3.0):
    dx, dy = array.shape
    new_array = np.copy(array)
    edgex = int(math.floor(window / 2.0))
    edgey = int(math.floor(window / 2.0))

    for i in range(dx):
        for j in range(dy):
            window_array = array[max(i - edgex, 0):min(i + edgex + 1, dx),
                                 max(j - edgey, 0):min(j + edgey + 1, dy)]
            new_array[i, j] = window_array.mean()
    return new_array

print smooth(array)

我知道这个问题已经有很多讨论了,但我还是没能解决它。

1 个回答

1
dx, dy = array.shape

array.shape 返回的不止两个值,这说明它有超过两个维度。

原因如下:

http://www.mathworks.de/de/help/matlab/ref/imread.html

“返回值 A 是一个包含图像数据的数组。如果文件包含的是灰度图像,A 就是一个 M 行 N 列的数组。如果文件包含的是真彩色图像,A 就是一个 M 行 N 列再加上 3 的数组,也就是 M-by-N-by-3。对于使用 CMYK 色彩空间的彩色 TIFF 文件,A 是一个 M 行 N 列再加上 4 的数组,也就是 M-by-N-by-4。有关更多信息,请参见格式特定信息部分的 TIFF。”

第三个维度表示红色、绿色和蓝色的值。

撰写回答