前言

利用Python实现OpenCV实现检索图片。废话不多说。

让我们愉快地开始吧~

开发工具

Python版本: 3.6.4

相关模块:

cv2模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

OpenCV可以检测图像的主要特征,然后提取图像的特征,使其成为图像描述符

这些图像特征,也就是图像描述符,可以作为图像搜索的数据库

特征检测算法

这里简单介绍一下OpenCV常用的几种特征检测和提取算法。

Harris、FAST:用于检测角点的。

SIFT、SURF、BRIEF:用于检测斑点的。

ORBFAST算法和BRIEF算法的结合体。\

检测和提取的工作做完了,就是特征匹配。

主要是「暴力匹配法」和「FLANN匹配法」。

提了好几次特征了,那么什么是图像的特征呢?

图像特征就是指有意义的图像区域,具有独特性或易于识别性,比如角点、斑点以及高密度区

角点可以通过OpenCV的cornerHarris来识别。

「SIFT」则是一种与图像比例无关的角点检测方法,尺度不变特征变换。

采用DoG和SIFT来检测关键点并提取关键点周围的特征。

「SURF」特征检测算法,则是采用Hessian算法检测关键点,使用SURF提取特征。

图像检索

采用FLANN匹配,近似最近邻的快速库

原始图片如下,为微博的Logo

目标图片如下,包含新浪微博的名称

具体代码如下

import cv2good = []
# 原始图片
queryImage = cv2.imread('wb1.jpg', 0)
# 目标图片
trainingImage = cv2.imread('wb2.jpg', 0)# 创建SIFT对象(特征检测器),并计算灰度图像(描述符)
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(queryImage, None)
kp2, des2 = sift.detectAndCompute(trainingImage, None)# 设置FLANN匹配器参数
FLANN_INDEX_KDTREE = 0
indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
searchParams = dict(checks=50)# FLANN匹配器
flann = cv2.FlannBasedMatcher(indexParams, searchParams)# K-最近邻匹配
matches = flann.knnMatch(des1, des2, k=2)# 绘制一个空白图片
matchesMask = [[0, 0] for i in range(len(matches))]# 绘制图像
for i, (m, n) in enumerate(matches):if m.distance < 0.7*n.distance:matchesMask[i] = [1, 0]good.append(m)# 图像参数
drawParams = dict(matchColor=(0, 255, 0),singlePointColor=(255, 0, 0),matchesMask=matchesMask,flags=0)# 最终结果
resultImage = cv2.drawMatchesKnn(queryImage, kp1, trainingImage, kp2, matches, None, **drawParams)# 检测是否匹配
if len(good) > 10:print('It is a match!')# 设置显示窗口
cv2.namedWindow('img', 0)
cv2.resizeWindow('img', 840, 480)
cv2.imshow('img', resultImage)
while True:if cv2.waitKey(0) & 0xff == ord('q'):break
cv2.destroyAllWindows()
复制代码

输出展示结果

看到原始图片上的logo和目标图片上的logo匹配上,大家也可以试一试哦~源码在此处

Python图像处理,cv2模块,OpenCV实现检索图片相关推荐

  1. 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  2. 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  3. 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  4. 《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  5. Python 使用cv2模块 进入视觉识别的报错,报错信息为AttributeError: module ‘cv2.cv2‘ has no attribute ‘bgsegm

    Python 使用cv2模块 进入视觉识别的报错,报错信息为AttributeError: module 'cv2.cv2' has no attribute 'bgsegm 问题描述--cv2模块 ...

  6. 《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  7. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  8. python安装cv2模块的方法_Python opencv模块cv2安装和部分函数使用

    Python opencv模块cv2安装和部分函数使用 前几天做了一下验证码识别,在这里分享一下用到的opencv模块cv2部分函数的使用方法,也是给自己加深一下记忆. 一.cv2模块安装 在这里提醒 ...

  9. layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克

    1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...

  10. cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克

    1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...

最新文章

  1. 【驱动】在内核源码中添加驱动程序
  2. 创业公司CEO每天应该做的13件事
  3. Linux下wine用法
  4. Python expandtabs() 方法
  5. 如何关闭win10自动更新_如何关闭win10系统自动更新
  6. Android init第三、四部分详细分析
  7. Activity not started, its current task has been brought to the front 。
  8. java逻辑运算符的使用
  9. 智能优化算法:粒子群算法相关代码
  10. python类中变量作用域_说说Python中变量的作用域?
  11. ad13批量安装元件库_别人的altium designer常用元件库和封装库下载-非常全面初学者有福了...
  12. mt3dgis 视频教程
  13. 这些效果我很喜欢,但愿对你们也有帮助
  14. oracle 之除数不为0
  15. SAP MM模块-库存盘点BAPI的使用及注意点
  16. 中国电信 CTWing 物联网平台运营数据大解密
  17. SSM+在线纳新系统 毕业设计-附源码241540
  18. 问题 C: 零基础学C/C++26——判断某整数是否既是5又是7的整数倍
  19. 钉钉添加代收邮箱地址
  20. mysql 5.6.35anzhaung_MySQL安装与配置(5.6.12,参考乐沙弥博客,未完成)

热门文章

  1. 长安大学计算机控制技术期末试题,长安大学汽车理论期末试卷及答案
  2. 【毕业设计_课程设计】在线免费小说微信小程序的设计与实现(源码+论文)
  3. 【Java】基础09
  4. 【CF #781 Div2】A-C
  5. 冲突域和碰撞域的理解
  6. Linux过滤关键字写入另一个文件
  7. Python3.7,在Anaconda中安装PIL
  8. ubuntu系统搭建steam饥荒联机服务器
  9. 分布式系统设计模式,你用过哪些?
  10. | + logger