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

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

个人感觉就是,和「以图搜图」有点像。

看了下面这个视频,或许你就能够明白了。

https://v.qq.com/x/page/y0880pe6kdc.html

也是一个很搞笑的片段...

/ 01 / 特征检测算法

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

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

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

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

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

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

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

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

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

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

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

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

剩下的太难了,以后慢慢了解~

/ 02 / 图像检索

N匹配,近似最近邻的快速库。

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

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

代码如下。

import cv2

good = []
# 原始图片
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匹配上了。

也就意味着,我们能够利用原始图片(微博logo)从一个包含目标图片的图片库里检索到目标图片(包含微博logo)。

以图搜图,这还是很相似的。

当然,我并不知道以图搜图到底是通过何种办法实现的。

毕竟弱鸡~

/ 03 / 总结

最开头放的视频是一部电影——疯狂的外星人。

OpenCV:图像检索相关推荐

  1. OpenCV学习笔记大集锦

    转载自: OpenCV学习笔记大集锦 – 视觉机器人 http://www.cvrobot.net/collect-opencv-resource-learn-study-note-chinese/ ...

  2. OpenCV学习笔记资料大集锦

    整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的.如果有好的资源,也欢迎介绍和分享. 1:OpenCV学习笔记 作者:CSDN 数量:55篇博文 网 ...

  3. [转]OpenCV学习笔记大集锦

    转载自: OpenCV学习笔记大集锦 – 视觉机器人 http://www.cvrobot.net/collect-opencv-resource-learn-study-note-chinese/ ...

  4. 用Python实现OpenCV特征提取与图像检索 | Demo

    参加「CTA 核心技术及应用峰会」,请扫码报名  ↑↑↑ 作者|Andrey Nikishaev 翻译 | 张蔚敏 审校 | reason_W 来源 | Python大本营(id:pythonnews ...

  5. Python OpenCV应用K均值聚类进行颜色量化

    Python OpenCV应用K均值聚类进行颜色量化 1. 效果图 2. 颜色量化是什么? 3. MiniBatchKMeans & KMeans 4. 源码 参考 在这篇博客文章中,我将向您 ...

  6. OpenCV 3最新模块介绍

    原文:https://zhuanlan.zhihu.com/p/19988205?columnSlug=hacker-and-painter OpenCV 3 的改动在哪? C 风格的API很快将会消 ...

  7. python绘制灰度图片直方图-opencv+python 统计及绘制直方图

    灰度直方图概括了图像的灰度级信息,简单的来说就是每个灰度级图像中的像素个数以及占有率,创建直方图无外乎两个步骤,统计直方图数据,再用绘图库绘制直方图. 统计直方图数据 首先要稍微理解一些与函数相关的术 ...

  8. 基于deep learning的快速图像检索系统

    深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统 作者:寒小阳  时间:2016年3月.  出处:  声明:版权所有,转载请联系作者并注明出处 1.引言 本系统是基于CV ...

  9. 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)

     基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval) 2016-07-25 14 ...

  10. 图像基础知识 —— Opencv图像处理

    1.数字图像概念 数字图像: 数字图像,又称为数码图像或数位图像,是二维图像用有限数字数值像素的表示,由数组或矩阵表示: 数字图像可以理解为一个二维函数f(x,y)f(x,y)f(x,y),其中x和y ...

最新文章

  1. 学python要基础吗-自学Python要有其他语言基础吗?
  2. 【MFC】MFC应用程序框架详解
  3. oracle10数据库链接失败,Oracle10g出现Enterprise Manager 无法连接到数据库实例解决办法...
  4. python中pop用法_python中pop()函数的用法
  5. 【效率提高10倍项目原创发布!】深度学习数据自动标注器开源 目标检测和图像分类(高精度高效率)
  6. 刷好老毛子系统进不了老毛子系统后台的解决办法
  7. 51nod 1384
  8. 友情链接模块phpcms
  9. Windows徽标键快捷键
  10. 测试手机是否降频软件,如何检测自己的iPhone是否被苹果降频 降频的处理方法有哪些...
  11. css过滤白色,使用CSS3模糊滤镜时,白色模糊的图像?
  12. 【免费毕设】JSP旅游网站建设设计与实现(源代码+论文)
  13. 积累的力量(《把时间当作朋友》读书笔记)
  14. 美国大学计算机科学博士生排名,2021美国大学本科计算机专业(高学位博士)排名...
  15. PXI知多少?—PXI背景及PXI机箱
  16. Unity MediaPlayer
  17. java 验证码_java实现简单的验证码功能
  18. $htttp内置服务
  19. 新居客盈门,渠道伙伴售前培训会议-华东场于上海举办
  20. mysql 建库与授权

热门文章

  1. hprose php用户手册,Laravel Hprose RPC 服务
  2. Mac上SecureCRT破解
  3. EasyAR WebAR 开发微信小程序记录
  4. 身份证识别APP、H5端部署,助力疫情防控人员信息采集
  5. vs2003无法打开sal.h
  6. SEGGER Embedded Studio 缺少 mergehex工具
  7. flyme禁止系统更新_彻底关闭魅族flyme系统自动更新的方法分享
  8. 关闭445端口等危险端口,应对勒索病毒
  9. ML Note 3.4 - 数据降维算法 PCA / t-SNE
  10. 数字信号处理复习总结