求助:卷积运算出现operands could not be broadcast together with shapes错误
图像边缘检测代码报错排查与修复
错误原因
你遇到的ValueError是因为两个卷积结果的尺寸不匹配:
- 计算
conv_im1时用了convolve2d的'same'参数,这个参数会让卷积输出的图像尺寸和输入的gray_image完全一致(也就是(842,474))。 - 计算
conv_im2时没指定mode参数,convolve2d默认用'full'模式,这种模式会保留所有卷积运算的结果,输出的图像尺寸比输入大(也就是(844,476))。
当你执行conv_im1**2 + conv_im2**2时,两个尺寸不一样的数组没法逐元素相加,所以触发报错。
解决方案
让两个卷积操作使用相同的mode参数即可,推荐用'same'模式,这样输出的结果尺寸和原图像一致,后续处理更直观。
修改后的代码
import numpy as np from skimage.io import imread, imshow from scipy.signal import convolve2d family = imread('image.jpg') gray_image = np.mean(family, axis=2) kernel1 = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]]) conv_im1 = convolve2d(gray_image, kernel1, 'same') kernel2 = np.array([[1, 0, -1], [2, 0, -2], [1, 0, -1]]) # 这里加上mode='same',和conv_im1保持一致 conv_im2 = convolve2d(gray_image, kernel2, 'same') edge_image = np.sqrt(conv_im1**2 + conv_im2**2)
内容的提问来源于stack exchange,提问作者pro100default.net
相关产品推荐
相关产品推荐

