Python图像处理,cv2模块,OpenCV实现检索图片
前言
利用Python实现OpenCV实现检索图片。废话不多说。
让我们愉快地开始吧~
开发工具
Python版本: 3.6.4
相关模块:
cv2模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
OpenCV可以检测图像的主要特征,然后提取图像的特征,使其成为图像描述符
这些图像特征,也就是图像描述符,可以作为图像搜索的数据库
特征检测算法
这里简单介绍一下OpenCV常用的几种特征检测和提取算法。
Harris、FAST:用于检测角点的。
SIFT、SURF、BRIEF:用于检测斑点的。
ORB:FAST算法和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实现检索图片相关推荐
- 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- Python 使用cv2模块 进入视觉识别的报错,报错信息为AttributeError: module ‘cv2.cv2‘ has no attribute ‘bgsegm
Python 使用cv2模块 进入视觉识别的报错,报错信息为AttributeError: module 'cv2.cv2' has no attribute 'bgsegm 问题描述--cv2模块 ...
- 《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- python安装cv2模块的方法_Python opencv模块cv2安装和部分函数使用
Python opencv模块cv2安装和部分函数使用 前几天做了一下验证码识别,在这里分享一下用到的opencv模块cv2部分函数的使用方法,也是给自己加深一下记忆. 一.cv2模块安装 在这里提醒 ...
- layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克
1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...
- cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克
1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...
最新文章
- 【驱动】在内核源码中添加驱动程序
- 创业公司CEO每天应该做的13件事
- Linux下wine用法
- Python expandtabs() 方法
- 如何关闭win10自动更新_如何关闭win10系统自动更新
- Android init第三、四部分详细分析
- Activity not started, its current task has been brought to the front 。
- java逻辑运算符的使用
- 智能优化算法:粒子群算法相关代码
- python类中变量作用域_说说Python中变量的作用域?
- ad13批量安装元件库_别人的altium designer常用元件库和封装库下载-非常全面初学者有福了...
- mt3dgis 视频教程
- 这些效果我很喜欢,但愿对你们也有帮助
- oracle 之除数不为0
- SAP MM模块-库存盘点BAPI的使用及注意点
- 中国电信 CTWing 物联网平台运营数据大解密
- SSM+在线纳新系统 毕业设计-附源码241540
- 问题 C: 零基础学C/C++26——判断某整数是否既是5又是7的整数倍
- 钉钉添加代收邮箱地址
- mysql 5.6.35anzhaung_MySQL安装与配置(5.6.12,参考乐沙弥博客,未完成)