为什么运行图像处理代码时出现ValueError: not enough values to unpack报错
报错原因排查与解决
核心报错原因
该报错的本质是等号左侧解包变量的数量和A.shape返回的元组长度不匹配。你收到的报错提示「期望3个值,仅得到2个」,说明你实际运行的代码中,报错行左侧写了3个接收变量,但A的实际维度只有2;如果你确认粘贴的代码和运行代码完全一致,那大概率是你读入的是彩色三通道图像,A.shape返回的是(高度, 宽度, 3)三个值,此时报错会显示为「期望2个值,得到3个」,两种场景的解决方案如下。
解决方案
- 先添加一行调试代码确认
A的实际维度:print(A.shape) - 如果是彩色三通道图像(输出类似
(224,224,3),你的均值滤波逻辑是针对单通道设计的,更推荐第一种方法):- 方法1:转灰度图后再处理,在resize代码后添加
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) - 方法2:仅取shape的前两个维度,将报错行修改为
m,n = A.shape[:2]
- 方法1:转灰度图后再处理,在resize代码后添加
- 如果是灰度单通道图像(输出类似
(224,224)):- 检查报错行是否误写了3个接收变量,修改为
m,n = A.shape即可
- 检查报错行是否误写了3个接收变量,修改为
其他代码逻辑修正
你的均值滤波代码还有两处可优化的问题:
- 循环范围越界:当前循环i从0开始,i=0时
i-1=-1会取到数组最后一位元素,属于逻辑错误,建议将循环改为for i in range(1, m-1):和for j in range(1, n-1): - 邻域求和漏项:当前求和代码重复写了两次
A[i+1, j+1],漏掉了A[i+1, j-1],修正后的求和部分为:
B[i, j] = (A[i-1, j-1] +A[i-1, j] +A[i-1, j+1] + A[i, j-1] +A[i, j] +A[i, j+1] + A[i+1, j-1] +A[i+1, j] +A[i+1, j+1])
内容的提问来源于stack exchange,提问作者ARON
相关产品推荐
相关产品推荐

