使用 OpenCV Python 检测和可视化两个图像之间的差异

使用 OpenCV Python 检测和可视化两个图像之间的差异

如果您需要比较两个图像并确定它们之间的差异,OpenCV Python 提供了一种简单有效的方法来完成此任务。本指南将向您展示如何使用OpenCV Python检测和可视化两个图像之间的差异。

先决条件

为了遵循本指南,您需要在计算机上安装 Python 3.x 和 OpenCV。

导入所需库

首先,我们需要导入所需的库。在这种情况下,我们将需要 cv2 库进行图像处理,numpy 用于数值计算。

import cv2
import numpy as np

加载图像

接下来,我们需要加载要比较的两个图像。我们将使用 cv2 库中的 imread() 函数来读取图像。

# Load the two images
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

调整图像大小

如果两个图像的大小不同,我们需要将它们调整为相同的尺寸以进行比较。我们将使用 cv2 库中的 resize() 函数来调整图像大小。

# Resize the images to the same dimensions
img1 = cv2.resize(img1, (640, 480))
img2 = cv2.resize(img2, (640, 480))

将图像转换为灰度

为了比较两个图像,我们需要将它们转换为灰度。我们将使用 cv2 库中的 cvtColor() 函数将图像转换为灰度。

# Convert the images to grayscale
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

计算图像之间的差异

现在我们有了两个灰度图像,我们可以计算它们之间的差异。我们将从另一个图像中减去一个图像并取差值的绝对值。

# Calculate the difference between the images
diff = cv2.absdiff(gray1, gray2)

阈值差异图像

为了更好地可视化两个图像之间的差异,我们将阈值差异图像。我们将使用 cv2 库中的 threshold() 函数来阈值图像。

# Threshold the difference image
_, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)

在阈值图像中查找轮廓

现在我们有了阈值图像,我们可以在图像中找到轮廓。我们将使用 cv2 库中的 findContours() 函数来查找轮廓。

# Find the contours in the thresholded image
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

在原始图像上绘制轮廓

最后,我们可以在原始图像上绘制轮廓,以可视化两个图像之间的差异。我们将使用 cv2 库中的 drawContours() 函数来绘制轮廓。

# Draw the contours on the original image
cv2.drawContours(img1, contours, -1, (0, 0, 255), 2)

显示图像

现在,我们可以显示原始图像和在其上绘制轮廓的图像,以可视化两个图像之间的差异。

# Display the images
cv2.imshow('Original Image', img1)
cv2.imshow('Difference Image', thresh)
cv2.waitKey(0)

知道如何使用OpenCV Python检测和可视化两个图像之间的差异

posted @ 2023-08-18 14:19  国产小品牌  阅读(663)  评论(0编辑  收藏  举报