- 博客(78)
- 收藏
- 关注
原创 利用罗德里格斯正逆公式,自己实现李群SO3(R),SE3(T)和李代数so3(Phi)(theta_n),se3(p,Phi)之间的转换
李群和李代数之间的转换及代码实现
2023-04-04 17:39:52 597
原创 用OpenCV进行相机标定(张正友标定,有代码)
目录1. 内参与畸变2. 用OpenCV标定相机程序3.画棋盘标定板4.OpenCV拍照1. 内参与畸变理论部分可以参考其他博客或者视觉slam十四讲相机标定主要是为了获得相机的内参矩阵K和畸变参数内参矩阵K畸变系数:径向畸变(k1,k2,k3), 切向畸变(p1,p2)径向畸变公式切向畸变公式张正友标定方法能够提供一个比较好的初始解,用于后序的最优化.这里用棋盘格进行标定,如果能够处理圆的偏心误差问题,用圆形图案标定板可能效果更好.至少三张图片,一般用10-20张图片为最佳,要保证相
2022-05-23 15:56:30 15856 20
原创 单源最短路径Dijkstra算法,和多源最短路径Floyd算法, C++代码
是不是有向图都行,区别只在于邻接矩阵是不是对称矩阵,对算法没有任何影响边的权重不能为负数目录单源最短路径**Dijkstra算法**多源最短路径**Floyd算法****例子:**单源最短路径Dijkstra算法可以求得单个节点src到所有节点的最短路按照非递减的顺序找出各个节点的最短路/**维护直到flag全部为true * flag :是否已经找到最短路, 初始化全部false * dist :目前的最短距离 ,初始化全部正无穷INT32_MAX * path :最短路径的上一个节.
2022-05-16 13:37:57 440
原创 深度优先搜索DFS,广度优先搜索BFS, 遍历矩阵
深度优先搜索DFS,用递归,相当于先序遍历广度优先搜索BFS, 用队列, push进去的时候访问,标记#include <iostream>#include <vector>#include <queue>using namespace std;struct axis{ axis() : x(-1), y(-1) {} axis(int x_, int y_) : x(x_), y(y_) {} int x; int y;
2022-05-04 19:55:26 324
原创 C++STL中的最大堆,最小堆
堆,优先队列,头文件和队列是同一个#include<queue>#include<iostream>#include<queue>using namespace std;int main(){ //最大堆 queue<int> max_heap;//默认就是最大堆 queue<int,vector<int>,less<int>> max_heap1; //完整版 //最小堆 queue<int
2022-05-04 14:52:29 3479
原创 打印从1到n位最大的数(考虑大数)
考虑大数,已经不能用long long表示了,就要用字符串或数组表示了,下面用字符串表示#include <iostream>#include <string>using namespace std;//用string表示的十进制数字,加1,超出边界返回false,正常加1返回truebool plus1(string &str);//打印string数字,忽略前面的0void print1(string &str);int main(){
2022-04-29 18:10:29 227
原创 C++隐式类型转换,显式类型转换(强制类型转换)
隐式类型转换1、当两个不同类型变量做运算的时候,如int a=1;double b=3.0;double c = a+b; //会把int转换成double再运算2、表达式返回类型不同,或者函数返回类型不同的时候int a = 3.6+2.3;例如函数返回类型是Int, 但是你return的是double类型,则会给你隐式转换成int强制类型转换1、C风格(常用)括号里面类型,或者括号里面数据int a=6;//下面两种都行,都是C方式double b = double..
2022-04-24 21:14:44 1131
原创 C++的五个内存存储区,C++的new/delete,C的malloc/free
C++中把内存详细的分成了5个区域栈函数的局部变量存储区,系统自动分配和释放堆程序员动态申请的内存,new出来的内存,或者malloc出来的内存。分别要用delete和free手动释放,防止溢出全局/静态存储区全局变量和static静态变量存储区常量存储区例如常量字符串等"I am Chinese"程序代码区存放程序的区域C++申请动态内存是new/delete,比C的malloc/free好用,本质也是调用C的方法,但是多了初始化等等new/delete
2022-04-24 20:13:20 683
原创 C++常用输入,cin, cin.get(), getline(cin,str)
cincin>>val;cin根据后面的val的类型读取:val是int 或double,则读取数字。val
2022-04-24 15:49:20 974
原创 C++局部变量,全局变量,static关键字,extern关键字
局部变量在函数内部定义的变量,包括main函数,都是局部变量,局部变量一般存储在动态存储区,函数执行完毕就被清理了。在复合语句{}中定义的变量,也就是在大括号{}中定义的变量。局部变量可以和外部变量重名,此时在局部变量作用域内,一直用的是局部变量全局变量在函数外定义的变量,也就是在main函数前面定义的变量。全局变量的作用域是定义位置到该源程序(.cpp文件)结束的位置。如果想要在本源程序中,但是在全局变量定义前使用它,需要extern外部变量说明一下;如果想要在同一个项目但是不同源程..
2022-04-24 15:31:45 1787
原创 C++继承中的成员权限、构造函数、析构函数
继承成员权限父类成员变量和成员函数权限类型为public, protected, private继承的方式同时也有这三种public, protected, private父类权限\继承方式publicprotectedprivatepublicpublicprotectedprivateprotectedprotectedprotectedprivateprivate不可访问不可访问不可访问可以看出,父类中的private成员,虽然确实..
2022-04-22 16:14:16 451
原创 C++递归解决“汉诺塔”代码
递归解决汉诺塔问题用一个list记录操作#include <iostream>#include <list>#include <string>using namespace std;struct Operator{ Operator(int n_, string from_, string to_) : n(n_), origin(from_), destination(to_) {} //第n个 int n; string
2022-04-21 19:58:01 767
原创 用OpenCV计算图像的亚像素值
原理如图:float subPixelValue(cv::Mat &img, float x, float y){ // boundary check if (x < 0) x = 0; if (y < 0) y = 0; if (x >= img.cols - 1) x = img.cols - 1 - 0.001; if (y > img.rows - 1) y
2022-04-19 13:50:56 5291
原创 查找算法:C++顺序查找、二分查找,代码、性能对比
顺序查找没有什么限制条件。二分查找条件:1、数据是有序的。2、能够随机访问,例如数组,链表就不行了下面程序对比了在一个有序数组中查找效率#include<iostream>#include<vector>#include<chrono>using namespace std;int main(){ const int N=100000; vector<int> VEC(N,0); //构造一个顺序数组 1-N
2022-04-17 16:06:08 1453
原创 C++判断字符是不是大写字母,小写字母,数字,空格; isalpha(),isdigit(),tolower(),toupper()
判断是不是数字 0-9int isdigit(); //返回0或1判断是不是字母 a-z A-Zint isalpha();判断是不是字母或者数字int isalnum();变成小写int tolower()char ch=tolower('Q');变成大写char ch=toupper('q');判断是不是小写int islower('s');判断是不是大写int isupper('Q');判断是不是空格或者Tabint isblank();判断是不是
2022-04-17 15:01:50 3681
原创 c++, map的[]访问和.at()访问区别
map中的key不可能重复,所以有[]和.at()访问,但是multimap就没有了,因为有重复的key,所以访问结果不一定唯一,也就没有意义了,所以直接没有这个功能。map访问元素建议使用.at(),如果[]访问没有这个key的话,会自动添加一个key,value是默认值,这可能不是我们想要的效果例如 map<int,string> MAP; MAP.emplace(pair<int,string>(1,"www")); //emplace()插入效果和insert
2022-04-16 19:13:03 4609
原创 排序算法:C++冒泡排序、选择排序、插入排序、希尔排序,快速排序,归并排序, 堆排序, 代码示例,效率对比
冒泡排序:每循环一次,对比前后两个数据,把大的挪到前面,所以循环一次最后一个是最大的元素,下次循环可以少循环一位vector<int> Bubble(vector<int> &vect){ int size = vect.size(); int N = size; int tem; for (int k = 0; k < size; k++) { N = size - k; // n,n-1,...,2,1
2022-04-16 16:51:46 916
原创 multiset,multimap只删除重复元素中的一个
multiset的头文件和set一个是#include<set>如果用erase(T& x),返回删除的个数,则会把和这个元素一样的全删掉,如果是erase(iterator),返回后一个迭代器,则只会删除一个,所以#include<iostream>#include<set>using namespace std;int main(){ multiset<char> SET{'a','b','c','d','a','b'}; //a
2022-04-15 14:08:16 6744 1
原创 反转单向链表,不新建链表,在原有基础上只改变指针方向
ListNode* reverseList(ListNode* head) { if(!head) return NULL; ListNode* p=head; //当前节点,开始的时候是NULL ListNode* pre=NULL; //前一个节点 ListNode* after=p->next; //后一个节点 while(p) { p->
2022-04-15 12:09:25 124
原创 根据前序遍历和中序遍历,构造一个二叉数,前序、中序、后序、层次遍历
#include <iostream>#include <unordered_map>#include <vector>using namespace std;//树节点struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solutio
2022-04-14 19:13:29 463
原创 D435i标定
方法1,标定包camera_calibration//安装包rosdep install camera_calibration//启动相机roslaunch realsense2_camera rs_camera.launchrostopic list//发现发布的话题名为/camera/color/camera_info/camera/color/image_raw打印棋盘格:链接执行指令rosrun camera_calibration cameracalibrator.p..
2022-04-08 21:18:53 1199 1
原创 C++实现写一个单向链表
1、头文件head.h#ifndef HEAD_H_#define HEAD_H_#include<iostream>struct node{ node():data(-1),next(static_cast<struct node*>(NULL)){} node(int x, struct node* p = static_cast<struct node*>(NULL)):data(x),next(p){} int data; //
2022-04-06 20:05:51 1211
原创 三角测量,用Opencv计算获得两图片匹配点的深度
函数cv::triangulatePoints(T1, T2, points1, points2, points_4d);输入:T1: 3*4的cv::Mat ,就是第一张图片的 R和t组合一起的T2: 3*4的cv::Mat ,就是第二张图片的 R和t组合一起的points1: vector<cv::Point2f> 前一张图片的匹配点points2: vector<cv::Point2f> 后一张图片的匹配点,肯定和上一个size()一样输出:points_..
2022-04-01 14:05:33 5289 1
原创 根据特征匹配关系,用OpenCV计算基础矩阵F, 本质矩阵E,旋转矩阵R,平移向量t
计算Fcv::Mat F = cv::findFundamentalMat(vector<cv::Point2f>& points1, vector<cv::Point2f>& points2, int method, ... ); 计算Ecv::Mat E = cv::findEssentialMet(points1, points2, K);..
2022-04-01 10:57:42 6114
原创 手写ORB特征提取 +暴力匹配
1、提取FAST关键2、计算关键点的方向,计算关键点描述子,描述子用的是8个32位uint32_t,也就刚好有256位3、暴力匹配#include<iostream>#include<opencv2/opencv.hpp>#include<cmath>#include<chrono>#include<vector>using namespace std;int ORB_pattern[256 * 4] = { 8, .
2022-03-31 14:31:35 4709
原创 c++进行按位与、或、非、异或、移位运算, 计算汉明距离
与、或、非、异或 运算都是二进制运算与“ & “都是1才得10&0 = 01&0 = 00&1 = 01&1 = 1例如 5&12 = 40 1 0 1 = 51 1 0 0 =12.------------0 1 0 0 =4或 " |"只要有一个是1,就得11 | 0 = 10 | 1 = 10 | 0 = 01 | 1 = 1例如 5|12 =130 1 0 1 =51 1 0 0 =12.-----..
2022-03-30 22:21:41 1917
原创 高斯牛顿法非线性优化
手写高斯牛顿原理看十四讲第6讲#include<iostream>#include<eigen3/Eigen/Core>#include<eigen3/Eigen/Dense>#include<opencv2/opencv.hpp>#include<vector>using namespace std;int main(int argc,char** argv){ /** * y = exp(ax^2 + b.
2022-03-29 18:55:03 508
原创 使用OpenCV给图像去畸变
相机畸变模型我们计算畸变都是在归一化平面上进行的,下面的(x,y), (x_distort,y_distort)都是在归一化坐标,相机坐标(X,Y,Z)的归一化坐标(X/Z, Y/Z, 1)1、径向畸变由透镜形状引起的,畸变系数k1, k2, k3,畸变模型:2、切向畸变由镜片安装和成像平面不平行引起的,畸变系数p1, p2,切向畸变模型:3、总的畸变模型求解思路我们得到的原图是畸变后的图像(x_distort,y_distort),要计算畸变之前的真实图像(x,y),不是..
2022-03-28 10:47:05 5868 6
原创 无法连接NVIDIA驱动:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver
nvidia-smi报错NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver原因: ubuntu内核更新了,和当初安装显卡驱动的时候的内核不一致了解决方法1把系统内核降低,在开机首选项选择低内核,也可以更改配置文件使默认开机自动选择低版本内核,方法参考链接解决方法2更新显卡驱动查看安装的驱动版本ls /usr/src显示我的显卡驱动为nvidis-470重新安装更新显卡驱动
2022-03-24 10:20:50 623
原创 类的成员类指针,可以相互指向,也就实现了可以互相修改各自的值
System类头文件System.h#ifndef SYSTEM_H_#define SYSTEM_H_#include<iostream>#include"Segment.h"#include"Tracking.h"namespace MY{ class System { public: System(); Segment* mpSegment; Tracking* mpTracking; ..
2022-01-05 10:59:52 2067
原创 opencv3+opencv3_contrib实现SIFT,SURF,ORB三种特征点的提取和匹配
SIFT#include <iostream>#include <string>#include <opencv2/opencv.hpp>#include <opencv2/xfeatures2d.hpp>#include <cstdlib>bool siftPointsDetect(std::string imgName1, std::string imgName2, int pointNum);int main(int a..
2021-12-27 15:57:30 1999
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人