以下是使用python中的opencv查找相同大小的两个图像的像素差异的代码。但是,它在最后一行给我一个错误,我不知道如何解决它。
if h1==h2:
if w1==w2:
c=np.zeros((h1,w1,3),np.uint8)
for i in range(img1.shape[0]):
for j in range(img1.shape[1]):
c[j][i]=img1[j][i]-img2[j][i]
IndexError:索引480超出了轴0,大小为480
答案 0 :(得分:1)
你混淆了指数; i
属于img1.shape[0]
。
img1[j][i]-img2[j][i]
那就是说,numpy可以为你提供这个过程,你可以简单地做
if img1.shape == img2.shape:
c = img1 - img2
但是,您必须小心数据类型。如果一个图像中的像素为0而另一个图像中的像素为32?
,该怎么办?>>> np.uint8(0) - np.uint8(32)
Warning (from warnings module):
File "__main__", line 2
RuntimeWarning: overflow encountered in ubyte_scalars
224
你想将它们转换为整数以获得差异,如果你想保持0-255范围内的差异,你可以采用绝对值。
c = img1.astype(int) - img2.astype(int)
# you can optionally do the following depending on what you want to do next
c = np.abs(c).astype(np.uint8)
OpenCV表示能够实现所有这些功能的功能cv2.absdiff()。
c = cv2.absdiff(img1, img2)