Python OpenCV 如何比较两个图像

Python OpenCV 如何比较两个图像

为了比较两个图像,我们使用两个图像的像素值的均方误差(MSE)。相似的图像将具有较小的均方误差值。使用此方法,我们可以比较具有相同高度、宽度和通道数的两个图像。

步骤

你可以使用以下步骤来使用OpenCV比较两个图像:

导入所需库。在以下所有Python示例中,所需的Python库为OpenCV,请确保你已经安装了它。

import cv2

使用cv2.imread() 读取输入图片,并将其转换为灰度图像。图像的高度、宽度和通道数必须相同。

img1 = cv2.imread('panda.png')
img2 = cv2.imread('panda1.png')
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

定义一个函数来计算两个图像之间的均方误差。

def mse(img1, img2):
   h, w = img1.shape
   diff = cv2.subtract(img1, img2)
   err = np.sum(diff**2)
   mse = err/(float(h*w))
   return mse

计算图像之间的均方误差(匹配误差)。

error = mse(img1, img2)

打印图像匹配误差(mse)并显示图像差异。

print("Image matching Error between the two images:", mse)
cv2.imshow("Contour", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

打印结果值,图像形状匹配度量。数值越低,匹配效果越好。

print("Matching Image 1 with Image 2:", ret12)

让我们来看一些示例以便更好理解。

我们将使用下面的图像作为示例中的输入文件

Python OpenCV 如何比较两个图像

Python OpenCV 如何比较两个图像

Python OpenCV 如何比较两个图像

示例 1

在这个示例中,我们创建了一个简单的四层人工神经网络,没有前向函数。

# import required libraries
import cv2
import numpy as np

# load the input images
img1 = cv2.imread('panda.jpg')
img2 = cv2.imread('panda1.jpg')

# convert the images to grayscale
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# define the function to compute MSE between two images
def mse(img1, img2):
   h, w = img1.shape
   diff = cv2.subtract(img1, img2)
   err = np.sum(diff**2)
   mse = err/(float(h*w))
   return mse, diff

error, diff = mse(img1, img2)
print("Image matching Error between the two images:",error)

cv2.imshow("difference", diff)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

在执行时,它会在控制台上产生以下输出 −

Image matching Error between the two images: 3.0696934396076028

下面我们会得到以下窗口显示两个图像之间的差异−

Python OpenCV 如何比较两个图像

示例 2

在这个Python程序中,我们比较了三个图像。

import cv2
import numpy as np
import matplotlib.pyplot as plt

img1 = cv2.imread('panda.jpg')
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
h, w = img1.shape

img2 = cv2.imread('panda1.jpg')
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
img3 = cv2.imread('bike.jpg')
img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)

def error(img1, img2):
   diff = cv2.subtract(img1, img2)
   err = np.sum(diff**2)
   mse = err/(float(h*w))
   msre = np.sqrt(mse)
   return mse, diff

match_error12, diff12 = error(img1, img2)
match_error13, diff13 = error(img1, img3)
match_error23, diff23 = error(img2, img3)

print("Image matching Error between image 1 and image 2:",match_error12)
print("Image matching Error between image 1 and image 3:",match_error13)
print("Image matching Error between image 2 and image 3:",match_error23)

plt.subplot(221), plt.imshow(diff12,'gray'),plt.title("image1 - Image2"),plt.axis('off')
plt.subplot(222), plt.imshow(diff13,'gray'),plt.title("image1 - Image3"),plt.axis('off')
plt.subplot(223), plt.imshow(diff23,'gray'),plt.title("image2 - Image3"),plt.axis('off')
plt.show()

输出

在执行时,上述Python程序将在控制台上生成以下输出−

Image matching Error between image 1 and image 2: 3.0696934396076028 
Image matching Error between image 1 and image 3: 23.37356529736358 
Image matching Error between image 2 and image 3: 24.15752299202943

然后我们得到了下面的窗口,显示了图像之间的差异 −

Python OpenCV 如何比较两个图像

注意,与图像1和图像2之间的匹配错误相比,图像1与图像3和图像2与图像3之间的匹配错误较少。因此,图像1和图像2更相似。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程