首页 > 编程语言 >使用 OpenCV Python 检测和可视化两个图像之间的差异

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

时间:2023-08-18 14:37:25浏览次数:45  
标签:Python 差异 cv2 OpenCV 可视化 图像

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

转自:使用 OpenCV Python 检测和可视化两个图像之间的差异 - Glasshost

如果您需要比较两个图像并确定它们之间的差异,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检测和可视化两个图像之间的差异

标签:Python,差异,cv2,OpenCV,可视化,图像
From: https://www.cnblogs.com/niubi007/p/17640389.html

相关文章

  • 必备Python代码段
    1.反转字符串以下代码使用Python切片操作来反转字符串。#Reversingastringusingslicingmy_string="ABCDE"reversed_string=my_string[::-1]print(reversed_string)#Output#EDCBA2.使用标题类(首字母大写)以下代码可用于将字符串转换为标题类。这是通过使用字符串类中......
  • python使用netmiko连接交换机绑定mac
    环境背景python3.8,华为交换机每次手动登录交换机再进行绑定操作,太过机械化啊,本着懒人原则,写一个脚本真不是事情脚本fromnetmikoimportConnectHandlerimporttimedefbing_mac(mac):sw_ip='10.10.10.10'#交换机ipusername='admin'#交换机账号......
  • Python打包时的MANIFEST.in如何使用
    MANIFEST.in文件用于控制在Python包的源码分发中应该包含哪些文件和目录。这对于包含在源码分发中但不是Python源代码文件的文件(如文档、配置文件、数据文件等)特别有用。以下是MANIFEST.in中的主要指令及其描述:include:包含匹配指定模式的文件。includeexample.txt......
  • (一)Qt与Python—PySide的简介及安装
    目录1.Pyside的简介2.pyside的安装3.pyside的Helloworld程序4.参考文献及网站连接1.Pyside的简介​PySide(在本文中指代PySide2和PySide6)是一个Python的图形化界面(GUI)库,由C++版的Qt开发而来,在用法上基本与C++版没有特别大的差异。PySide是一个python绑定的跨平台图形化......
  • python初阶语法
    python基础语法长文警告!!!本文适合初学py的小白阅读(根据需要进行跳转)。输出函数print()#输出数字print(98.5)#输出字符串print("Hello,clovershrub")print('hello,world')#输出表达式print(3+1)#将数据输出文件中,注意点,1.所指定的盘存在,2.使用file=fpfp=open('D:......
  • Python 矢量数据库和矢量索引:构建 LLM 应用程序
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景由于使用其硬件创建的生成式AI应用程序,Nvidia经历了显着的增长。另一项软件创新,矢量数据库,也正在乘着生成式人工智能的浪潮。开发人员正在向量数据库上用Python构建AI驱动的应用程序。通过将数据编码为向量,他们可以利......
  • Python字符串定义的三种方法!
    字符串是Python编程语言中的基本数据类型,也是Python编程中非常重要的数据类型之一。在Python中,我们可以通过三种不同的方式来定义字符串,分别是:单引号、双引号、三引号,接下来是具体的内容介绍。1、使用单引号在Python中,使用单引号来定义字符串是最基本的方式。单引号用......
  • bad_python
      对着正确的pyc文件在010把题目文件的前缀改掉  ......
  • Python如何下载wheel包
    安装wheelpipinstallwheel-ihttps://pypi.douban.com/simple下载pipwheel-ihttps://pypi.douban.com/simpleflask批量下载requirements.txtFlask==2.0.1Flask-Cors==3.0.10flask-restx==0.5.1SQLAlchemy==1.4.22pipwheel-rrequirements.txt......
  • Python 关于字典嵌套字典通过正则筛选关键字
    1、@classmethoddefget_dict_value(cls,in_dict,target_key,results=[],not_d=True):"""in_dict:字典嵌套字典内容target_key:需要筛选的valueresults:筛选后返回列表data_list:通过正则筛选需要的内容,return......