在python中利用opencv简单做图片比对的方法

  
  1. 安装opencv

首先需要安装OpenCV,可以通过命令行或者Anaconda Prompt输入以下命令进行安装:

pip install opencv-python
  1. 导入库

导入库OpenCV,并载入两张待比对的图片

import cv2

img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
  1. 比对图片

使用OpenCV的matchTemplate函数进行图片比对,该函数将返回一副灰度图像,表示模板在输入图像中的匹配情况:

res = cv2.matchTemplate(img1, img2, cv2.TM_CCOEFF_NORMED)
  1. 提取匹配位置及匹配系数

提取匹配位置及匹配系数:

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

其中min_loc和max_loc表示最小匹配值和最大匹配值所在的位置,max_val即为最大匹配值,也即匹配系数。

  1. 显示比对结果

最后可以把比对结果显示出来,用一个矩形框圈出模板在被比对图片中的位置:

w, h = img2.shape[:2]
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img1, top_left, bottom_right, (0, 0, 255), 2)
cv2.imshow('Matched Image', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 示例1

下面是一个示例1,用于比对两张刻度尺图片中的相同位置,验证两张图片的尺度是否一致:

import cv2

img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

res = cv2.matchTemplate(img1, img2, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

w, h = img2.shape[:2]
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img1, top_left, bottom_right, (0, 0, 255), 2)

cv2.imshow('Matched Image', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 示例2

下面是一个示例2,用于比对两张同一张图片的不同位置,验证两个位置的像素是否相同:

import cv2

img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

res = cv2.matchTemplate(img1, img2, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

w, h = img2.shape[:2]
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
cv2.rectangle(img1, top_left, bottom_right, (0, 0, 255), 2)

cv2.imshow('Matched Image', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

img3 = img1[200:400, 200:400]
img4 = img1[600:800, 600:800]

res2 = cv2.matchTemplate(img3, img4, cv2.TM_CCOEFF_NORMED)
min_val2, max_val2, min_loc2, max_loc2 = cv2.minMaxLoc(res2)

if max_val2 > 0.9:
   print("The two selected areas are similar")
else:
   print("The two selected areas are different")

以上就是在python中利用opencv简单做图片比对的方法的完整攻略,包含两条示例说明。

相关文章