简介:通过 Python 实现图片对比,找出不同位置的坐标,可以用于图像识别、目标检测等领域。本文将介绍一种基于 OpenCV 和 NumPy 的简单方法,通过比较两张图片的像素值来找出不同之处。
在 Python 中,我们可以使用 OpenCV 和 NumPy 库来实现图片对比,找出不同位置的坐标。以下是一个简单的示例代码:
import cv2import numpy as np# 读取两张图片img1 = cv2.imread('image1.jpg')img2 = cv2.imread('image2.jpg')# 将图片转换为灰度图gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)# 计算两张图片的差异图diff = cv2.absdiff(gray1, gray2)# 将差异图二值化,以便于找出不同之处_, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)# 找到不同之处的轮廓contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 遍历轮廓,找出不同位置的坐标for contour in contours:x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(img1, (x, y), (x+w, y+h), (0, 0, 255), 2)# 显示结果图片cv2.imshow('Result', img1)cv2.waitKey(0)cv2.destroyAllWindows()
在上述代码中,我们首先使用 OpenCV 的 imread 函数读取两张图片,并将其转换为灰度图。然后,我们使用 absdiff 函数计算两张图片的差异图,并使用 threshold 函数将其二值化。接下来,我们使用 findContours 函数找到不同之处的轮廓,并遍历轮廓,使用 boundingRect 函数找到每个不同位置的边界矩形,并使用 rectangle 函数在原图上画出这些矩形。最后,我们使用 imshow 函数显示结果图片。
需要注意的是,在实际应用中,我们可能需要对输入的图片进行预处理(如缩放、旋转、裁剪等),以使图片对齐或适应特定的场景。此外,对于更复杂的场景(如背景干扰、光照变化等),可能需要采用更高级的方法(如特征提取、机器学习等)来进行图片对比和目标检测。