gpt4 book ai didi

python - 查找两个图像的像素差异时出现IndexError

转载 作者:行者123 更新时间:2023-12-02 17:45:28 25 4
gpt4 key购买 nike

以下是在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: index 480 is out of bounds for axis 0 with size 480

最佳答案

您混合了指数; 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)

关于python - 查找两个图像的像素差异时出现IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36457903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com