如何找到numpy阵列中图像的差异?

2024-09-30 20:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算两幅图像之间的差异。我期望结果是一个整数,但我没有得到我期望的结果

from imageio import imread
#https://raw.githubusercontent.com/glennford49/sampleImages/main/cat1.png
#https://raw.githubusercontent.com/glennford49/sampleImages/main/cat2.png
img1="cat1.png" # 183X276
img2="cat2.png" # 183x276
numpyImg1=[]
numpyImg2=[]
img1=imread(img1)
img2=imread(img2)
numpyImg1.append(img1)
numpyImg2.append(img2)
diff = numpyImg1[0] - numpyImg2[0] 
result = sum(abs(diff)) 

print("difference:",result)

打印:

# it prints an array of images rather than printing an interger only

目标:

difference: <int>

Tags: httpscomrawpngmainimg1img2imread
3条回答

我相信numpy数组的维数不是1,您需要执行与数组维数相同的求和次数,才能获得单个和值

   [1,2,3]
    sum gives : 6

   [[1,2,3],[1,2,3]]
   sum gives : [2,4,6]
   doing a second sum opertion gives
     : 12 (single value)

在打印数据之前,您可能需要再添加一个“总和(结果)”(如果图像是二维的)

例如:

     numpyImg2.append(img2)
     diff = numpyImg1[0] - numpyImg2[0] 
     result = sum(abs(diff)) 

     result = sum(result) >> Repeat

     print("difference:",result)

您正在使用Python的内置sum函数,它只执行一个求和along the first dimension of a NumPy array。这就是为什么将2D数组作为输出,而不是预期的单个整数。请在结果上使用^{},这将在内部展平多维NumPy数组,然后对结果求和。此外,您还可以使用^{}进行绝对计算:

import numpy as np

result = np.sum(np.abs(diff)) 

使用numpy.sum意味着在答案中使用内置的sum函数之前,您不再需要将数组重塑为扁平表示形式。对于将来的开发,始终对要在NumPy数组上执行的任何算术运算使用NumPy方法。它可以防止意外的行为,比如你刚才看到的

(彩色)图像是一个3D矩阵,因此您可以使用numpy.array(image)将这些图像转换为numpy数组,然后您可以得到这两个numpy数组的差异

最后的答案是三维数组

相关问题 更多 >