OpenCV基于ORB算法实现角点检测
作者:?VVcat? 发布时间:2021-08-20 03:08:13
标签:OpenCV,ORB,角点检测
本文实例为大家分享了OpenCV基于ORB算法实现角点检测的具体代码,供大家参考,具体内容如下
ORB算法是FAST算法和BRIEF算法的结合,ORB可以用来对图像中的关键点快速创建特征向量,并用这些特征向量来识别图像中的对象。
实例化ORB
orb = cv.ORB_create(nfeatures)
参数:
nfeatures:特征点的最大数量
利用orb.detectAndCompute()检测关键点并计算
kp, des = orb.detectAndCompute(gray, None)
参数:
gray:进行关键点检测的图像(灰度图像)
返回:
kp:关键点信息,包括位置,尺度,方向信息
des:关键点描述符,每个关键点BRIEF特征向量,二进制字符串。
将关键点检测结果绘制在图像上
cv.drawKeypoints(image, keypoints, outputimage, color, flags)
参数:
image: 原始图像
keypoints:关键点信息,将其绘制在图像上
outputimage:输出图片,可以是原始图像
color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。
flags:绘图功能的标识设置
1、cv2.DRAW_MATCHES_FLAGS_DEFAULT:创建输出图像矩阵,使用现存的输出图像绘制匹配对和特征点,对每一个关键点只绘制中间。
2、cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:不创建输出图像矩阵,而是在输出图像上绘制匹配对。
3、cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:对每一个特征点绘制带大小和方向的关键点图形。
4、cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS:单点的特征点不被绘制。
import cv2 as cv
from matplotlib import pyplot as plt
# 1.图像读取
img = cv.imread("1.jpg")
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 2.ORB角点检测
# 2.1实例化ORB对象
orb = cv.ORB_create(nfeatures=1000)
# 2.2 检测关键点,并计算特征描述符
kp, des = orb.detectAndCompute(gray, None)
print(des.shape)
# 3.将关键点检测在图像上
img2 = cv.drawKeypoints(img, kp, None, flags=0) # 也可以添加 color 参数指定图像显示关键点的颜色,例如 img2 = cv.drawKeypoints(img, kp, None, color=(0, 0, 255), flags=0)
# 4.绘制图像
plt.figure(figsize=(10, 8), dpi=100)
plt.imshow(img2[:, :, ::-1])
plt.xticks([]),
plt.yticks([])
plt.show()
来源:https://blog.csdn.net/qq_44989881/article/details/116156729


猜你喜欢
- 本文实例为大家分享了python放大图片和画方格的具体代码,供大家参考,具体内容如下1、Python 放大图片和画方格算法#!C:/Pyth
- Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译
- 配置如下TEMPLATES = [下面'context_processors': [中添加'django.core.
- python时间处理月份加减第三方模块 :python-dateutil安装方式:pip install python-dateutil实例
- 感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用。 函数: 1、从左开
- 1.在爬虫文件中只需要解析提取出图片地址,然后将地址提交给管道在管道文件对图片进行下载和持久化存储class ImgSpider(scrap
- 话不多说了。 先来看两段代码: var elems = document.getElementsByTagName('a')
- 先登录MySQLshell> mysql --user=root mysql有密码的需要添加 –password 或-p 选项添加用户
- 删除文件os.remove( filename ) # filename: "要删
- IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这里的CSS属性可以是元素固
- 写完“无序列表”和“有序列表”之后已经有人和我说这两篇看得没什么意思。这两篇文章如果只以单向读取的形式阅读那么的确是没什么意思,但是这两篇重
- function utf8_substr($str,$len) { for($i=0;$i<$len;$i++) { $temp_st
- python 网络编程详解网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、
- 具体代码如下所示:import numpy as npfrom matplotlib import pyplot as pltfrom sc
- 一、搭建项目环境1、创建 RBAC五张表RBAC,即基于角色的权限访问控制(Role-Based Access Control),就是用户通
- <html><head><meta http-equiv="Content-Type" c
- 本文和大家重点讨论一下Perl split函数的用法,Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的
- !!!本博客,是对图像的背景颜色的修改的基础讲解~!!!还包括一个练习——是对背景色修改的一点应用尝试!!!——始终相信学习多一点探索,脚步
- 上篇使用Vue.js制作仿Metronic高级表格(一)静态设计介绍了需求、原型设计以及静态页面实现,这篇讲解如何使用Vue渲染数据,实现动
- 语言是信息传播的主要障碍。多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获