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

下面是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 xx.py文件点击完之后一闪而过的问题

    解决 Python xx.py 文件点击完之后一闪而过的问题,通常有以下两种方法: 方法1:使用cmd命令窗口 打开 cmd 命令窗口,进入 Python 文件所在的目录,并输入以下命令: python xx.py 其中,xx.py 表示文件名。执行完毕后,命令窗口将显示程序运行的所有结果。如果程序不需要任何输入,则命令窗口会停留在程序运行结束的状态。 示例…

    python 2023年6月3日
    00
  • 10分钟用Python快速搭建全文搜索引擎详解流程

    下面我将详细讲解用Python快速搭建全文搜索引擎的流程,以及具体的示例。 什么是全文搜索引擎? 全文搜索引擎是一种能够对文档内容进行全文检索的工具,能够从头到尾匹配所有的文本,而不仅仅是部分关键词。全文搜索引擎可以大大提高文档检索的效率和准确性,常用于网站搜索、文件搜索等应用场景。 搭建全文搜索引擎的流程 下面是搭建全文搜索引擎的大致流程: 准备数据:将需…

    python 2023年6月3日
    00
  • 简介Python中用于处理字符串的center()方法

    当我们需要将字符串居中输出时,Python中提供了center()方法可以方便地实现字符串的居中输出。下面是这个方法的详细攻略: 标准语法 字符串对象.center(width[, fillchar]) 其中,width是指输出结果的总长度,fillchar为可选参数,表示空白处需要填充的字符,并默认使用空格填充。 示例一 下面是一个简单的示例,展示了cen…

    python 2023年6月5日
    00
  • python 针对在子文件夹中的md文档实现批量md转word

    下面是针对在子文件夹中的md文档实现批量md转word的完整攻略: 1. 安装pandoc 首先需要安装pandoc,pandoc是一个文档转换工具,支持多种格式之间的转换。 可以通过以下命令在终端里安装: brew install pandoc 或者到pandoc的官网下载安装包进行安装。 2. 编写脚本文件 创建一个python脚本,其目的是遍历指定目录…

    python 2023年6月5日
    00
  • 如何在Python中使用pymysql库连接MySQL数据库?

    以下是如何在Python中使用pymysql库连接MySQL数据库的完整使用攻略,包括安装pymysql库、连接MySQL数据库、执行SQL语句等骤。同时,提供了两个示例以便更好理解如何使用pymysql库连接MySQL数据库。 步骤1:安装pymysql库 在Python中,我们可以使用pip命令安装pymysql库。以下是安装pymysql库基本语法: …

    python 2023年5月12日
    00
  • Python中处理时间的几种方法小结

    下面是针对“Python中处理时间的几种方法小结”这个主题的完整攻略: Python中处理时间的几种方法小结 时间处理在实际开发中非常常见,Python中也提供了多种处理时间的方法和模块。接下来,我们将对常用的一些方法进行小结。 1. time模块 time模块提供了一些基本的时间函数,可以用于时间戳的转换和计算等。下面是其中几个常用的函数: time() …

    python 2023年6月2日
    00
  • 详解Python中的测试工具

    下面是详解Python中的测试工具的完整攻略。 1. 什么是测试工具 测试工具指的是用于测试和验证代码功能正确性的工具,通常包括测试框架、断言库、Mock库等。 在Python中,常用的测试工具包括unittest(Python自带)、pytest、doctest等。 2. unittest unittest是Python自带的测试框架,可以用于编写单元测试…

    python 2023年6月3日
    00
  • python使用正则表达式来获取文件名的前缀方法

    以下是“Python使用正则表达式来获取文件名的前缀方法”的完整攻略: 一、问题描述 在Python中,正则表达式是一种用于匹配和处理文本的强大工具。在文件处理中,有时需要获取文件名的前缀,即文件名中除去扩展名的部分。本文将详细讲解Python使用正则表达式来获取文件名的前缀方法,以及如何在实际开发中应用。 二、解决方案 2.1 获取文件名的前缀 在Pyth…

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