Python基于Opencv识别两张相似图片

yizhihongxing

下面是Python基于OpenCV识别两张相似图片的完整攻略:

1. 安装依赖库

首先,我们需要安装OpenCV库和Python中的图片处理库Pillow(PIL):

pip install opencv-python Pillow

2. 读取图片数据

我们可以使用OpenCV读取图片数据:

import cv2

img1 = cv2.imread('image1.jpg')  # 读取图片1
img2 = cv2.imread('image2.jpg')  # 读取图片2

3. 提取图片特征

我们可以使用OpenCV中的ORB算法提取图片特征:

orb = cv2.ORB_create()  # 创建ORB特征提取器

kp1, des1 = orb.detectAndCompute(img1, None)  # 提取图片1特征
kp2, des2 = orb.detectAndCompute(img2, None)  # 提取图片2特征

4. 匹配图片特征

我们可以使用OpenCV中的BFMatcher暴力匹配算法匹配图片特征:

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)  # 创建暴力匹配器

matches = bf.match(des1, des2)  # 匹配图片特征

matches = sorted(matches, key=lambda x: x.distance)  # 按距离从小到大排序

5. 判断匹配成功

我们定义一个阈值,如果最好的匹配的距离小于这个阈值,就认为两张图片相似:

THRESHOLD = 50  # 设定阈值

if matches[0].distance < THRESHOLD:
    print('两张图片相似')
else:
    print('两张图片不相似')

示例说明1

我们先来测试图片1和2是完全相同的:

import cv2

img1 = cv2.imread('image1.jpg')  # 读取图片1
img2 = cv2.imread('image1.jpg')  # 读取图片2

orb = cv2.ORB_create()  # 创建ORB特征提取器

kp1, des1 = orb.detectAndCompute(img1, None)  # 提取图片1特征
kp2, des2 = orb.detectAndCompute(img2, None)  # 提取图片2特征

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)  # 创建暴力匹配器

matches = bf.match(des1, des2)  # 匹配图片特征

matches = sorted(matches, key=lambda x: x.distance)  # 按距离从小到大排序

THRESHOLD = 50  # 设定阈值

if matches[0].distance < THRESHOLD:
    print('两张图片相似')
else:
    print('两张图片不相似')

运行后输出结果为:两张图片相似

示例说明2

我们再来测试两张稍微不同的图片:

import cv2

img1 = cv2.imread('image3.jpg')  # 读取图片1
img2 = cv2.imread('image4.jpg')  # 读取图片2

orb = cv2.ORB_create()  # 创建ORB特征提取器

kp1, des1 = orb.detectAndCompute(img1, None)  # 提取图片1特征
kp2, des2 = orb.detectAndCompute(img2, None)  # 提取图片2特征

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)  # 创建暴力匹配器

matches = bf.match(des1, des2)  # 匹配图片特征

matches = sorted(matches, key=lambda x: x.distance)  # 按距离从小到大排序

THRESHOLD = 50  # 设定阈值

if matches[0].distance < THRESHOLD:
    print('两张图片相似')
else:
    print('两张图片不相似')

运行后输出结果为:两张图片不相似

可以看到,使用ORB算法和BFMatcher算法对两张图片进行特征提取和匹配可以很好地实现两张相似图片的识别,这在实际中也非常有用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基于Opencv识别两张相似图片 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • python实现简单图书管理系统

    下面我会详细讲解实现简单图书管理系统的完整攻略。 1. 确定需求 在开发任何系统之前,我们需要了解系统的需求,这样可以帮助我们更好的设计系统的结构以及制定开发计划。下面是图书管理系统的需求: 有一个书库,可以添加、删除、修改图书信息。 可以按名称、作者、出版社等关键字进行搜索和查询。 可以显示所有图书信息。 2. 设计数据库 接下来我们需要设计系统的数据库结…

    python 2023年5月19日
    00
  • 从 Apache 运行 python 脚本的最简单方法

    【问题标题】:Easiest way to run python script from Apache从 Apache 运行 python 脚本的最简单方法 【发布时间】:2023-04-06 05:21:01 【问题描述】: 我花了很长时间试图弄清楚这一点。我基本上是在尝试开发一个网站,当用户单击特定按钮时,我必须在其中执行 python 脚本。在研究了 …

    Python开发 2023年4月7日
    00
  • Python从数据库的csv inc结构中删除范围线

    【问题标题】:Python remove range lines from csv inc structure of databasePython从数据库的csv inc结构中删除范围线 【发布时间】:2023-04-02 19:45:02 【问题描述】: 我想删除范围行:15 – 405061,但我想拥有我的 CSV 数据库文件的结构。我的脚本(如下)可以…

    Python开发 2023年4月8日
    00
  • 在python中实现调用可执行文件.exe的3种方法

    接下来我会详细讲解在Python中实现调用可执行文件.exe的三种方法。 方法一:使用Python自带的os模块 Python自带的os模块可以用来运行外部程序。通过将可执行文件路径传递给os.system()方法,我们就可以在Python中调用.exe文件。代码如下: import os os.system("path/to/your/execu…

    python 2023年5月30日
    00
  • 用Python计算三角函数之atan()方法的使用

    当我们需要计算三角函数时,Python提供了一个内置的math模块,其中包括可以计算三角函数的方法,如sin(), cos(), tan()和atan()等。在本篇攻略中,我们将深入讲解如何使用Python里的atan()方法来计算反正切值。 1. atan()方法的定义 atan()是math库中的一个方法,它可以返回一个数的反正切值,其计算公式为:ata…

    python 2023年6月3日
    00
  • python正则表达式常见的知识点汇总

    Python正则表达式常见的知识点汇总 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换和割字符串。Python提供了re模块来处理正则表达式。本文将为您详细讲解Python正则表达式的常见知识点,包括正表达式语法、模块的常用方法和两个示例说明。 正则表达式语法 在正则表达中使用[]表示字符集,^表示取反,-表示范围,+匹配一个或多个字符,*表示…

    python 2023年5月14日
    00
  • Python中列表与元组的乘法操作示例

    下面是Python中列表与元组的乘法操作示例的完整攻略。 列表与元组的乘法操作 列表和元组在Python中都支持乘法操作(重复操作)。这个操作会重复列表或元组中的元素,产生一个新的列表或元组。 列表的乘法操作示例 下面是一个列表乘法操作的示例: fruits = [‘apple’, ‘banana’, ‘orange’] print(fruits * 3) …

    python 2023年5月13日
    00
  • 浅谈Python程序的错误:变量未定义

    当我们在Python编程过程中,运行程序时可能会出现“NameError: name ‘variable_name’ is not defined”这样的错误,这意味着我们正在尝试使用未定义的变量。以下是解决程序中变量未定义的完整攻略: 1. 检查变量名称 当我们在Python编程过程中遇到“NameError: ‘variable_name’ is not…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部