Python图像处理,cv2模块,OpenCV实现检索图片

article/2025/9/14 22:10:06

前言

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

让我们愉快地开始吧~

开发工具

Python版本: 3.6.4

相关模块:

cv2模块;

以及一些Python自带的模块。

环境搭建

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

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

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

1.jpg

特征检测算法

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

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

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

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

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

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

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

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

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

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

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

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

图像检索

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

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

2.jpg

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

3.jpg

具体代码如下

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()
复制代码

输出展示结果

4.jpg

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

 


http://chatgpt.dhexx.cn/article/tZaPQVZs.shtml

相关文章

搜狗搜索事业部总经理:从识图搜索谈未来大势

经过近半年的独立研发&#xff0c;搜狗搜索推出了识图搜索功能&#xff0c;即可通过上传图片等方式搜索找到相似群组图片和资料。日前&#xff0c;就这一新功能以及搜索领域热点话题&#xff0c;CSDN记者专访了搜狗公司搜索事业部总经理茹立云。 搜狗公司搜索事业部总经理茹立云…

计算机视觉是否已经进入瓶颈期?

作者&#xff1a;周博磊 链接&#xff1a;https://www.zhihu.com/question/51863955/answer/127888709 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 其实这个问题也是我近段时间一直在思考的问题. 昨天刚在组里做…

淘宝/天猫API:img2text-图片识别商品接口

万邦淘宝/天猫图片识别商品接口 API 返回值说明 img2text-图片识别商品接口 onebound.taobao.img2text 公共参数 请求地址: https://console.open.onebound.cn/console/?ipony 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secret…

怎样找一张图片的原图、出处?最全搜图网站+具体案例分享

前不久随手帮一网友找了张图&#xff0c;想了想中间的经历挺有意思&#xff0c;所以今天打算来说说以图搜图这个话题 第一部分&#xff0c;先介绍常用的识图引擎第二部分&#xff0c;想分享一下阿虚自己的搜图经验&#xff0c;也是今天主要想分享的。 ▍1 首先推荐几个识图引…

【码云周刊第 28 期】计算机视觉时代的识图技术

为什么80%的码农都做不了架构师&#xff1f;>>> Venture Scanner 追踪了全球957家人工智能公司&#xff0c;总融资额为48亿美金。其中&#xff0c;机器学习、自然语言处理、计算机视觉等认知技术占据当前市场主导地位。计算机视觉作为一种人工智能的基础技术应用&a…

生信识图之 点图进阶-4 (PCA下篇)

各位亲爱的土豪富婆&#xff0c;承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂。 近期有朋友说发现有人抄袭咱们的文章&#xff0c;自标为“原创”。对此大Y老师有心理准备&#xff0c;咱们的每一篇文章都是大Y老师仔细思考后字斟句酌写下来的&#xff0c;好内容被抄袭已经…

用html和css做搜狗网页,搜狗识图的十大用法,你用过几种

搜狗识图的十大用法&#xff0c;你用过几种 CSS布局HTML小编今天和大家分享美 哪种输入法新功能 识图出文字搜狗输入法就可以。 点击输入框弹出搜狗键盘&#xff0c;进入搜狗工具栏的小键盘图标&#xff0c;进入加号添加文字扫描。 识图软件有百度识图、搜狗识图、TinEye、360识…

Chrome扩展 - 百度识图

我经常搜集些小图片&#xff0c;网上的图片往往都有水印&#xff08;特别是现在微博发的图片&#xff0c;几乎右下角都有水印&#xff09;或者比较小&#xff0c;经常会有想找图片原始的版本的冲动。 最近我才发现原来百度有个识图搜索&#xff0c;可以搜索出相似的图片&#x…

华为MIB关键字IOD查询地址及方法

官方地址 https://support.huawei.com/onlinetoolweb/infoM/index.do?langzh&domain1 输入设备型号 版本 display version #输入命令查询版本 启动时间查询 snmpwalk -v 3 -u 安全用户名 -a SHA -A 认证密码 -x AES -X 加密密码 -l authPriv 设备地址 1.3.6.1.4.1.2011.…

导航上显示某个地点已关闭什么意思_大众MIB(275)教程之导航使用

大众可以说近几年的发展非常快&#xff0c;仅车载收音机都更换了好几代了。从最初的单纯收音机到后来的6碟CD机RCD510&#xff0c;最初国内上市的导航RNS510&#xff0c;还有后来自带蓝牙的RNS315&#xff0c;再到PQ平台187A&#xff0c;当初抄的也是火的很几乎每天都能看到187…

php 中mb开头什么意思,mb是兆的意思吗

MB是兆的意思&#xff0c;MB是英文“MByte”的简写&#xff0c;是计算机中的一种储存单位&#xff1b;MByte是指字节数量&#xff0c;Mbit是指比特位数&#xff0c;MByte中的“Byte”虽然与Mbit中的“bit”翻译一样&#xff0c;都是比特&#xff0c;也都是数据量度单位&#xf…

SNMP原理和MIB库

目录 背景概述 SNMP简介 基于SNMP的网管结构概述 SNMP协议 SNMP报文格式 报文处理过程 MIB MIB树结构 参考 背景概述 随着网络的规模越来越庞大&#xff0c;网络中的设备种类繁多&#xff0c;如何对越来越复杂的网络进行有效的管理&#xff0c;从而提供高质量的网络服…

LTE系统信息 --- MIB、SIB

前言 UE在搜索小区过程之后&#xff0c; 已经与小区取得下行同步&#xff0c;得到小区的 PCI&#xff08;Physical-layer-Cell Identity&#xff09; 以及检测到系统帧的 timing&#xff08;即 10ms timing&#xff09;。 接着&#xff0c;UE 需要获取到小区的系统信息&#xf…

计算机系统cache是什么意思啊,cache是什么意思 ?(图文)

在计算机存储系统的层次结构中&#xff0c;介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。Zkk电脑_数码_手机应用问题解决的IT技术网站seo - 云狐网 某些机器甚至有二…

SNMP中的MIB是什么?

&#xfeff;&#xfeff; 在SNMP中&#xff0c;我们都应该知道著名的MIB了。那么这个具体是什么作用呢&#xff1f;在此我们就来详细介绍一下这个SNMP mib的具体作用。管理信息库MIB指明了网络元素所维持的变量&#xff08;即能够被管理进程查询和设置的信息&#xff09;。MIB…

计算方法实验:方程求根二分法、不动点迭代法、牛顿法

计算方法实验一&#xff0c;方程求根 分别用Matlab和C写了一下&#xff0c;初学Matlab&#xff0c;如有不足还请指正。 实验内容&#xff1a; 1&#xff09;在区间[0,1]内用二分法求方程 e x 10 ∗ x − 2 e^x10*x-2 ex10∗x−2的近似根&#xff0c;要求误差不超过 0.5 1 0…

MATLAB之牛顿迭代法

MATLAB之牛顿迭代法 一、算法原理 1、迭代公式 将 f (x)在点xk做Taylor展开f(x)f(xk)f’(xk)(x-xk)…&#xff0c;则有 由上式可得牛顿迭代公式为&#xff1a; X&#xff08;k1&#xff09;X(k)- f (X(k))/f’(X(k)) 2、牛顿法的几何意义 由上式可知&#xff0c;如果如果我…

Matlab牛顿迭代法求方程的根(GUI)

牛顿迭代法的具体内容不赘述它的核心算法是&#xff1a; k 1; x x0; x0 x e*2; % 为了让初启动时满足循环条件 while (abs(x-x0))>e && (k<N) % 同时限定误差和最大循环次数x0 x;x x0 - f(x0)/df(x0); % 牛顿迭代法式子k k1; end这是一个非常简单的牛顿…

牛顿迭代法 求 根

这是一个求根很牛皮的一个方法, 迭代几次后精度也变得非常的高了. 假设我们求√2的值, 用牛顿迭代法. 大致过程就是随便选取一个自认为离根比较近的, 离谱点也没事, 假如选x 4, 然后不断进行如下操作: 不断令 x x - f(x)/f’(x); (f(x) x^2 - a(a 2)); 所以就是: x 4 - …

牛顿迭代法求开方-详细且通俗讲解

目录 •写在前面 •前戏-二分法实现 •牛顿迭代法 代码实现 •写在前面 求开方这件事儿&#xff0c;很多时候用一个sqrt方法就搞定了&#xff0c;很少有趣思考这底层的实现到底是用什么方法完成的。正好我遇到了需要实现sqrt方法&#xff0c;这里就仔细的讲解一下如何去实…