python(Opencv)的特征点提取和画线匹配 - 代码

2023-05-16

 本博客属于赋值内容,原文请看以下连接(亲测有用):

【OpenCV-Python】29.OpenCV的特征检测——特征匹配_opencv 特征匹配 python_机器视觉小学徒的博客-CSDN博客

一、关键点获取并画图

# -*- coding: utf-8 -*
import cv2
import matplotlib.pyplot as plt
 
# 1.读取灰度图像
image1 = cv2.imread("p1.png")
image2 = cv2.imread("p2.png")

gray1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

# 2.SIFT实例化
orb = cv2.ORB_create() #可以选择不同特征点,见后者
# 3.检测关键点
kq1, dst1 = orb.detectAndCompute(gray1, None)
kq2, dst2 = orb.detectAndCompute(gray2, None)

# 4.绘制关键点
cv2.drawKeypoints(image1, kq1, image1, (0, 0, 255),flags=1)  # flags=1 决定特征点的大小
cv2.drawKeypoints(image2, kq2, image2, (0, 0, 255),flags=1)  # flags=1 决定特征点的大小
# 绘制图像
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 16))  # nrows=1, ncols=2, 1行 两列
axes[0, 0].set_title("SIFT_feature_detect image1")            # [0, 0], [0, 1] 注意区别
axes[0, 0].imshow(image1[:, :, ::-1])
axes[1, 1].set_title("SIFT_feature_detect image2")
axes[1, 1].imshow(image2[:, :, ::-1])
plt.show()
cv2.waitKey(0)

结果如下:

光流法特征点匹配

import cv2
import numpy as np

# 读取图片
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

# 转为灰度图像
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

# Shi-Tomasi角点检测
corners1 = cv2.goodFeaturesToTrack(gray1, maxCorners=100, qualityLevel=0.3, minDistance=7)
corners2, status, err = cv2.calcOpticalFlowPyrLK(gray1, gray2, corners1, None)

# 用cv2.drawKeypoints绘制特征点
img1_keypoints = cv2.drawKeypoints(img1, corners1, None, color=(0, 255, 0), flags=0)
img2_keypoints = cv2.drawKeypoints(img2, corners2, None, color=(0, 255, 0), flags=0)

# 特征点描述符提取和匹配
orb = cv2.ORB_create()
keypoints1, descriptors1 = orb.detectAndCompute(gray1, None)
keypoints2, descriptors2 = orb.detectAndCompute(gray2, None)

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(descriptors1, descriptors2)

# 绘制匹配图
matches_img = cv2.drawMatches(img1, keypoints1, img2, keypoints2, matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# 显示图片
cv2.imshow('Image 1 Keypoints', img1_keypoints)
cv2.imshow('Image 2 Keypoints', img2_keypoints)
cv2.imshow('Matches', matches_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  获得图像的关键点后,可通过计算得到关键点的描述符。关键点描述符可用于图像的特征匹配。通常,在计算图A是否包含图B的特征区域时,将图A称做训练图像,将图B称为查询图像。图A的关键点描述符称为训练描述符,图B的关键点描述符称为查询描述符。

二、暴力匹配器

暴力匹配器使用描述符进行特征比较。在比较时,暴力匹配器首先在查询描述符中取一个关键点的描述符,将其与训练描述符中的所有关键点描述符进行比较,每次比较后会给出一个距离值,距离最小的值对应最佳匹配结果。所有描述符比较完后,匹配器返回匹配结果列表。
OpenCV的cv2.BFMatcher_create()函数用于创建暴力匹配器,其基本格式如下:

bf = cv2.BFMatcher_create([normType[, crossCheck]])

bf为返回的暴力匹配器对象
normType为距离测量类型, 默认为cv2.NORM_L2, 通常, SIFT描述符使用cv2.NORM_L1或cv2.NORM_L2, ORB描述符使用cv2.NORM_HAMMING
crossCheck默认为False, 匹配器为每个查询描述符找到k个距离最近的匹配描述符, 为True时, 只返回满足交叉验证条件的匹配结果

 暴力匹配器对象的match()方法返回每个关键点的最佳匹配结果,其基本格式如下:

ms = bf.match(des1, des2)

ms为返回的结果, 它是一个DMatch对象列表, 每个DMatch对象表示关键点的一个匹配结果, 其dintance属性表示距离, 距离值越小匹配度越高
des1为查询描述符
des2为训练描述符

 获得匹配结果后,可调用cv2.drawMatches()函数或cv2.drawMatchesKnn()函数绘制匹配结果图像,其基本格式如下:

outImg = cv2.drawMatches(img1, keypoints1, img2, keypoints2, matches1to2[, matchColor[, singlePointColor[, matchesMask[, flags]]]])

outImg = cv2.drawMatches(img1, keypoints1, img2, keypoints2, matches1to2[, matchColor[, singlePointColor[, matchesMask[, flags]]]])

outImg为返回的绘制结果图像, 图像中查询图像与训练图像中匹配的关键点个两点之间的连线为彩色
img1为查询图像
keypoints1为img1的关键点
img2为训练图像
keypoints2为img2的关键点
matches1to2为img1与img2的匹配结果
matchColor为关键点和链接线的颜色, 默认使用随机颜色
singlePointColor为单个关键点的颜色, 默认使用随机颜色
matchesMask为掩膜, 用于决定绘制哪些匹配结果, 默认为空, 表示绘制所有匹配结果
flags为标志, 可设置为下列参数值:
cv2.DrawMatchesFlags_DEFAUL:默认方式, 绘制两个源图像、匹配项和单个关键点, 没有围绕关键点的圆以及关键点的大小和方向
cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS:不会绘制单个关键点
cv2.DrawMatchesFlags_DRAW_RICH_KEYPOINTS:在关键点周围绘制具有关键点大小和方向的圆圈

具体代码如下:

# -*- coding: utf-8 -*
import cv2 # 暴力匹配器、ORB描述符和match()方法

img1 = cv2.imread("xhu1.jpg", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("xhu2.jpg", cv2.IMREAD_GRAYSCALE)

orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)

bf = cv2.BFMatcher_create(cv2.NORM_HAMMING, crossCheck = False)
ms = bf.match(des1, des2)
ms = sorted(ms, key = lambda x:x.distance)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, ms[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

cv2.imshow("Xhu1", img1)
cv2.imshow("Xhu2", img2)
img3 = cv2.resize(img3,None,fx=0.5,fy=0.6) #  改变图像大小
cv2.imshow("Matches", img3)

cv2.waitKey(0)
cv2.destroyAllWindows()


 
 

# 暴力匹配器、SIFT描述符和match()方法
# -*- coding: utf-8 -*
import cv2

img1 = cv2.imread("xhu1.jpg", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("xhu2.jpg", cv2.IMREAD_GRAYSCALE)

sift=cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)

bf = cv2.BFMatcher_create(cv2.NORM_L1, crossCheck = False)
ms = bf.match(des1, des2)
ms = sorted(ms, key = lambda x:x.distance)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, ms[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# ms = np.expand_dims(ms,1)
# img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, ms[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

cv2.imshow("Xhu1", img1)
cv2.imshow("Xhu2", img2)
cv2.imshow("Matches", img3)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

暴力匹配器对象的knnMatch()方法可返回指定数量的最佳匹配结果,其基本格式如下:

ms = knnMatch(des1, des2, k=n)

ms为返回的匹配结果, 每个列表元素是一个子列表, 它包含了由参数k指定个数的DMatch对象
des1为查询描述符
des2为训练描述符
k为返回的最佳匹配个数
# 暴力匹配器、ORB描述符和knnMatch()方法
  # -*- coding: utf-8 -*
import cv2

img1 = cv2.imread("xhu1.jpg", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("xhu2.jpg", cv2.IMREAD_GRAYSCALE)

orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)

bf = cv2.BFMatcher_create(cv2.NORM_HAMMING, crossCheck = False)
ms = bf.knnMatch(des1, des2, k=2)

# 应用比例测试选择要使用的匹配结果
good = []
for m, n in ms:
    if m.distance < 0.75 * n.distance:
		good.append(m)

img3 = cv2.drawMatches(img1, kp1, img2, kp2, good[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
# good = np.expand_dims(good,1)
#img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

cv2.imshow("Xhu1", img1)
cv2.imshow("Xhu2", img2)
cv2.imshow("Matches", img3)


cv2.waitKey(0)
cv2.destroyAllWindows()

三、FLANN匹配器

FLANN(Fast Library for Approximate Nearest Neignbors)为近似最近邻的快速库,FLANN特征匹配算法比其它的最近邻算法更快。
在创建FLANN匹配器时,需要传递两参数:index_params和search_params。
index_params用来指定索引树的算法类型和数量。SIFT算法可以使用下面的代码来设置。
 

FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE,
                    trees= 5)

ORB算法可以使用下面的代码来设置。

FLANN_INDEX_LSH = 6
index_params = dict(algorithm = FLANN_INDEX_LSH,
                    table_number = 6,
                    key_size = 12,
                    multi_probe_level = 1)

  search_params用于指定索引树的遍历次数,遍历次数越多,匹配结果越精细,通常设置为50即可,如下所示:

search_params = dict(check = 50)
# FLANN匹配器、ORB描述符
# -*- coding: utf-8 -*
import cv2

img1 = cv2.imread("xhu1.jpg", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("xhu2.jpg", cv2.IMREAD_GRAYSCALE)

orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)

# 定义FLANN参数
FLANN_INDEX_LSH = 6
index_params = dict(algorithm = FLANN_INDEX_LSH,
                    table_number = 6,
                    key_size = 12,
                    multi_probe_level = 1)
search_params = dict(check = 50)

flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.match(des1, des2)
draw_params = dict(matchColor = (0,255,0),
                   singlePointColor = (255,0,0),
                   matchesMask = None,
                   flags = cv2.DrawMatchesFlags_DEFAULT)

img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:20], None, **draw_params)

cv2.imshow("Xhu1", img1)
cv2.imshow("Xhu2", img2)
cv2.imshow("Matches", img3)


cv2.waitKey(0)
cv2.destroyAllWindows()

# FLANN匹配器、SIFT描述符
# -*- coding: utf-8 -*
import cv2

img1 = cv2.imread("xhu1.jpg", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("xhu2.jpg", cv2.IMREAD_GRAYSCALE)

sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)

# 定义FLANN参数
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE,
                    trees = 5)
search_params = dict(check = 50)

flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.match(des1, des2)
draw_params = dict(matchColor = (0,255,0),
                   singlePointColor = (255,0,0),
                   matchesMask = None,
                   flags = cv2.DrawMatchesFlags_DEFAULT)

img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:20], None, **draw_params)

cv2.imshow("Xhu1", img1)
cv2.imshow("Xhu2", img2)
cv2.imshow("Matches", img3)


cv2.waitKey(0)
cv2.destroyAllWindows()

四、OpenCV-Python资源下载

OpenCV-Python测试用图片、中文官方文档、opencv-4.5.4源码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python(Opencv)的特征点提取和画线匹配 - 代码 的相关文章

  • 非线性优化 (曲线拟合) 问题:高斯牛顿、g2o 方法总结

    其实还有一个Ceres库可以进行优化 xff0c 但是之前的博客已经具体分析了 xff0c 所以这里就对其余两个进行了介绍 xff0c 相关的内容是SLAM14讲里面的知识 一 理论部分 我们先用一个简单的例子来说明如何求解最小二乘问题 x
  • VINS-Fusion : EUROC、TUM、KITTI测试成功 + 程序进程详细梳理

    完成以下任务的前提是系统安装了必备的库 xff0c 比如cere Eigen3 3等 提前下载好了数据集EUROC xff0c KITTI等 一 相关论文 T Qin J Pan S Cao and S Shen A General Opt
  • ROS 简单理解

    https download csdn net download qq 30022867 11120759 utm medium 61 distribute pc relevant download none task download b
  • ROS系列:七、熟练使用rviz

    7 熟练使用rviz xff08 1 xff09 rviz整体界面 rviz是ROS自带的图形化工具 xff0c 可以很方便的让用户通过图形界面开发调试ROS 操作界面也十分简洁 xff0c 如图29 xff0c 界面主要分为上侧菜单区 左
  • ROS系列:八、图像消息和OpenCV图像之间进行转换-cv_bridge

    cv bridge是在ROS图像消息和OpenCV图像之间进行转换的一个功能包 一 xff09 在ROS图像和OpenCV图像之间转换 xff08 C 43 43 xff09 xff11 xff0e Concepts xff08 概念 xf
  • ROS系列:九、rosbag使用

    文章目录 解析rosbag中的 bag文件 xff0c 得到 jpg图片数据和 pcd点云数据 https blog csdn net weixin 40000540 article details 83859694 1 rosbag写入文
  • 三、松灵课堂 | SCOUT的仿真使用

    仿真环境的介绍 Gazebo Gazebo是一款3D动态模拟器 xff0c 能够在复杂的室内和室外环境中准确有效地模拟机器人群 与游戏引擎提供高保真度的视觉模拟类似 xff0c Gazebo提供高保真度的物理模拟 xff0c 其提供一整套传
  • 1PPS:秒脉冲 相关概念理解

    时钟模块上的GPS接收机负责接收GPS天线传输的射频信号 xff0c 然后进行变频解调等信号处理 xff0c 向基站提供1pps信号 xff0c 进行同步 GPS使用原子钟 xff08 原子钟 xff0c 是一种计时装置 xff0c 精度可
  • opencv GStreamer-CRITICAL

    使用openvino中的opencv跑之前的代码 碰到个问题 span class token punctuation span myProg span class token operator span span class token
  • 激光雷达 LOAM 论文 解析

    注意 xff1a 本人实验室买的是Velodyne VLP 16激光雷和 LOAM 论文中作者用的不一样 xff0c 在介绍论文之前先介绍一下激光雷达的工作原路 xff0c 这样更容易理解激光雷达的工作过程 xff0c 其实物图如下图1所示
  • VINS 细节系列 - 坐标转换关系

    前言 在学习VINS Mono过程中 xff0c 对初始化代码中的坐标转换关系做出了一些推导 xff0c 特意写了博客记录一下 xff0c 主要记录大体的变量转换关系 相机和IMU的外参 若需要VINS标定旋转外参 xff0c 则进入以下代
  • VINS 细节系列 - 光束法平差法(BA)Ceres 求解

    一 理论部分 学习过VINS的小伙伴应该知道 xff0c 在SFM xff08 structure from motion xff09 的计算中 光束法平差法 BA xff08 Bundle Adjustment xff09 的重要性 xf
  • Ceres 详解(一) Problem类

    引言 Ceres 是由Google开发的开源C 43 43 通用非线性优化库 xff08 项目主页 xff09 xff0c 与g2o并列为目前视觉SLAM中应用最广泛的优化算法库 xff08 VINS Mono中的大部分优化工作均基于Cer
  • VINS - Fusion GPS/VIO 融合 一、数据读取

    目录 一 相关概念 二 程序解读 2 1 参数读取 解析 xff1a 2 2 获取图像时间信息 解析 xff1a 2 3 获取图像时间信息 解析 xff1a 2 4 定义VIO结果输出路径和读取图像信息 解析 xff1a 2 5 读取GPS
  • VINS - Fusion GPS/VIO 融合 二、数据融合

    https zhuanlan zhihu com p 75492883 一 简介 源代码 xff1a VINS Fusion 数据集 xff1a KITTI 数据 程序入口 xff1a globalOptNode cpp 二 程序解读 2
  • VINS - Fusion GPS/INS/视觉 融合 0、 Kitti数据测试

    放两张图片 至于为什么 xff1f 后面会解释 xff01 程序下载 xff1a https github com HKUST Aerial Robotics VINS Fusion 数据集制作 xff1a https zhuanlan z
  • GPS/INS/视觉 融合 、 自己采集数据测试

    cd VIO GPS MapVIG cmake build cmake make run MapVIG 别忘了更新一下 一 运行程序 打开第一个终端 roscore 打开第二个终端 进入工作区间内 xff0c 分别输入 xff1a cd G
  • 九、 惯性导航解算

    一 概述 惯性导航解算就是从上一时刻的导航信息推导本时刻的导航信息 xff0c 包括姿态 速度 位置 具体来讲 xff0c 就是构建当前时刻导航信息与上一时刻导航信息 运动输入 角速度 加速度 之间的关系 xff0c 确切地说 xff0c
  • 十二、构建一个基本的组合导航系统

    一 概述 在之前的文章里 xff0c 我们从一个基本的IMU模块开始讲起 xff08 二 xff09 xff0c 利用Allan方差分析方法 xff08 三 四 xff09 xff0c 得出了其误差参数 xff0c 又通过标定 xff08
  • 电脑键盘工作原理

    xfeff xfeff 随着IBM PC机的发展 xff0c 键盘也分为XT AT PS 2键盘以至于后来的USB键盘 PC系列机使用的键盘有83键 84键 101键 102键和104键等多种 XT和AT机的标准键盘分别为83键和84键 x

随机推荐

  • 十三、扩展一个组合导航系统

    感谢大神分享 xff1a https zhuanlan zhihu com p 156958777 一 概述 上一篇文章我们讲述了怎样搭建一个基本的组合导航系统 xff0c 它仅仅包括IMU做预测 GPS做观测 xff0c 而实际中 xff
  • 三、FSAS + Novatel接收机和相机时间同步、数据保存、解码等 细节说明

    一 器件说明 1 GNSS 接收机是 P ropak6 如下图所示 xff1a 具体得介绍 xff1a 1 https blog csdn net hltt3838 article details 110622732 2 二 NovAtel
  • Word 中出现公式不能编辑问题(兼容模式)

    当word中的公式不能编辑 xff0c 多数原因是由于word是处于兼容模式下 xff0c 这个时候就需要取消world的兼容模式 xff0c 具体步骤如下 xff1a 一 打开word文档 二 点击 word中的文件 出现如下结果 xff
  • 理论三、 MSCKF 数学基础

    感谢 xff1a 紫薯萝卜 https zhuanlan zhihu com p 76793847 1 数学定义 后续将进行MSCKF数学基础介绍 xff0c 先总结一下数据符号定义 坐标系定义 物理量定义 估计量定义 四元数定义 xff1
  • 算法改进5:开源算法Open VINS试用

    1 Open VINS简介 Open VINS是Huang Guoquan老师团队在2019年8月份开源的一套基于MSCKF的VINS算法 xff0c 黄老师曾是Tango项目的核心成员 xff0c 在MSCKF这块非常的权威 Github
  • MSCKF 公式推导

    看完这篇博客建议再看 xff1a http www xinliang zhong vip msckf notes 目录 一 简介 二 符号说明 三 状态向量 3 1 真实状态向量 true state 3 2 误差状态向量 error st
  • MSCKF 源码解析 一

    论文 xff1a https arxiv org abs 1712 00036 源码路径 https github com daniilidis group msckf mono 源码框架 上图展示了整个msckf源码框架 xff0c 每当
  • C++中 仿函数简单介绍

    仿函数 xff0c 顾名思义 xff0c 就是 仿造函数 的意思 xff0c 它并不是函数 xff0c 但是却有着类似于函数的行为 那么 xff0c 它到底是什么 xff1f 首先要说的是 xff1a 仿函数是泛型编程强大威力和纯粹抽象概念
  • GNSS/INS组合导航(八):INS/GPS组合导航

    INS GPS组合导航 对比INS与GPS导航方法 xff0c 二者都有其各自的优缺点 惯性导航系统INS是一种全自主的导航系统 xff0c 可以输出超过200Hz的高频信号 xff0c 并且具有较高的短期测量精度 除了提供位置与速度之外还
  • Word 中利用“多级列表“功能实现章节标题自动编号

    一 打开 多级列表 打开Word文档 xff0c 在 开始 选择多级列表 点击定义新的多级列表 xff1b 点击之后 xff0c 便可以得到下面的界面 xff1a 二 设置固定格式的 多级标题 假设我们需要下面的标题格式 xff0c 我们需
  • 端口映射怎么设置

    路由器端口映射的作用就是让互联网上的用户可以访问内网中的服务器 xff0c 内网的一台电脑要上因特网对外开放服务或接收数据 xff0c 都需要端口映射 端口映射分为动态和静态 动态端口映射 xff1a 内网中的一台电脑要访问某网站 xff0
  • 解决Word中出现的多级列表编号不显示的问题

    解决办法一 常见的办法是 xff1a 光标置于标题前方 xff0c 按 ctrl 43 xff0c 编号消失位置出现一小条灰色 xff0c 再按ctrl 43 shift 43 S 重新应用样式 确定 即可找回编号 注意 xff1a 但下次
  • GPS从入门到放弃(二十五)、卡尔曼滤波

    一 概述 单点定位的结果因为是单独一个点一个点进行的 xff0c 所以连续起来看数据可能出现上串下跳的情况 xff0c 事实上并不符合实际情况 为了解决这个问题 xff0c 考虑到物体运动的连续性和运动变化的缓慢性 xff0c 可以通过滤波
  • RealSenseD435i (一):Ubuntu18.04 下的安装、使用和bag录制 ,且解决 undefined symbol 问题(最简单的方法)

    注意 realsense ros 要和 librealsense 版本匹配 realsense ros 2 2 11 对应的 Realsense SDK 为 librealsense 2 31 0 否则后面会出现让人崩溃的问题 其中 nbs
  • ( C# + vs2017 )串口助手 零基础详细教程(二)

    感谢 xff1a 串口助手 简洁版 上位机软件零基础教程 xff08 C 43 visual studio2017 xff09 xff08 二 xff09 SWPU 机器人实验室 CSDN博客 在上篇博客中 xff0c 我们完成了串口助手
  • RTK定位技术原理

    RTK即载波相位差分技术 xff0c rtk定位能够实时地提供测站点在指定坐标系中的三维定位结果 xff0c 并达到厘米级精度 普通GPS的定位精度大于1米 xff0c 信号误差有50 的概率会达到2米以上 另外 xff0c GPS无法支持
  • Endnote的插件被禁止,始终加载不了 - 终极解决办法

    1 用管理员 的身份运行word xff1a 找到word 右键 以管理员的身份运行 2 打开一个word 文件 选项 加载项 转到 选择endnote cite while you write 点击删除 xff08 删除前记住你的endn
  • 高斯白噪声(white Gaussian noise,WGN)

    本文科普一下高斯白噪声 xff08 white Gaussian noise xff0c WGN xff09 百度百科上解释为 高斯白噪声 xff0c 幅度分布服从高斯分布 xff0c 功率谱密度服从均匀分布 xff0c 听起来有些晦涩难懂
  • 【3】IMU模块:PA-IMU-460 ROS驱动 + 与GNSS时间同步

    一 模块介绍 惯性测量单元 IMU 产品展示 西安精准测控有限责任公司 说明 这是一款国产的IMU模块 之所以选择这个是因为同等精度的产品价格8500元 这个只要2500元 缺点是 担心国产的模块性能不好 参数需要自己标定 二 程序运行 c
  • python(Opencv)的特征点提取和画线匹配 - 代码

    本博客属于赋值内容 xff0c 原文请看以下连接 xff08 亲测有用 xff09 xff1a OpenCV Python 29 OpenCV的特征检测 特征匹配 opencv 特征匹配 python 机器视觉小学徒的博客 CSDN博客 一