作者:非妃是公主
专栏:《计算机视觉》
个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩专栏系列文章
Cannot find reference ‘imread‘ in ‘init.py‘
error: (-209:Sizes of input arguments do not match) The operation is neither ‘array op array‘ (where
cs231n-2022-01 Assignments1-numpy的使用
ModuleNotFoundError: No module named ‘cs231n‘
主要是由于需要进行运算的两个图像矩阵大小不一致造成的。
具体地说,对于图像尺寸问题,这次报错也体会到了为什么图像都要64×64,128×128……这些2的倍数次方的数,其中一个原因就是,下采样和上采样(卷积和反卷积)是图像处理中两个很重要的运算,而这些2的次方大小尺寸的图像经过下采样和上采样后大小不会发生变化。
比如在金子塔融合过程中,计算拉普拉斯金字塔时存在着subtract操作,即两张图像做差;而图像融合时,又需要利用拉普拉斯矩阵进行add操作,即两张图像像素求和。
求差和求和就需要两张图像的尺寸相同,由于图像的尺寸的不规则(不是2的倍数),就很难保证经过多次卷积再反卷积依然可以得到相同大小的图像。具体报错如下:
解决方案如下,增加sameSize(imgA: numpy.ndarray, imgB: numpy.ndarray)函数,如下:文章来源:https://uudwc.com/A/2XZ
def sameSize(imgA: numpy.ndarray, imgB: numpy.ndarray):
"""
两张尺寸不同的图片
:param imgA: 图片 A
:param imgB: 图片 B
:return: 统一尺寸的两张图像: tuple
"""
row1, col1 = imgA.shape[0:2]
row2, col2 = imgB.shape[0:2]
row = min(row1, row2)
col = min(col1, col2)
imgA = imgA[0:row, 0:col]
imgB = imgB[0:row, 0:col]
return imgA, imgB
函数中调用如下:
通过返回值和参数进行传递即可。文章来源地址https://uudwc.com/A/2XZ