- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 C++ 多线程学习(二) 互斥锁std::mutex
在多线程中经常会遇到多个线程同时修改同一个变量的情况,这个时候如果不对线程进行一定约束,很可能会导致意想不到的结果。例如有两个线程1和线程2,线程2的输入是线程1的结果。很显然如果在主线程中同时开启了线程1和线程2,像上面那样,它们是同时运行的,会直接导致程序的崩溃。所以线程同步锁应运而生,当遇到它时它会让当前线程独占某个变量,其它同样需要修改该变量的线程此时只能处于等待状态,等到当前线程结束之后,线程独占锁自动释放,其它线程可以修改内容。#include<thread> #inclu
2022-03-10 14:06:52
865
原创 C++ queue容器适配器
只能访问 queue<T> 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。std::queue: 模板类queue定义在<queue>头文件中。队列(Queue)是一个容器适配器(Container adaptor)类型,被特别设计用来运行于FIFO(First-in first-out)场景,在该场景中,只能从容器一端添加(Insert)元素,而在另一端提取(Extract)元素。只能从容器”后面”压进(Push)元素,从容器”前面”提取(Pop
2022-03-09 21:58:49
67
原创 C++ 条件运算符 ?
Exp1 ? Exp2 : Exp3;其中,Exp1、Exp2 和 Exp3 是表达式。请注意冒号的使用和位置。? : 表达式的值取决于 Exp1 的计算结果。如果 Exp1 为真,则计算 Exp2 的值,且 Exp2 的计算结果则为整个 ? : 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,且 Exp3 的计算结果则为整个 ? : 表达式的值。? 被称为三元运算符,因为它需要三个操作数.#include <iostream>using namespace st.
2022-03-09 16:35:30
369
原创 C++ Lambda函数
lambda函数(无名函数)比较简短,且整个项目不复用(只用一次);1、为进行排序算法,比较两个数大小时(sort函数)#include <iostream>#include <vector>#include <algorithm>using namespace std;bool compare(int& a, int& b){ return a > b;}int main(void){ int dat
2022-03-09 14:12:34
900
原创 GTSAM学习(二)pnp
根据3D点以及相对应的2D像素点,利用GASAM求解最优相机位姿;#include <gtsam/inference/Symbol.h>#include <gtsam/nonlinear/LevenbergMarquardtOptimizer.h>#include <gtsam/geometry/SimpleCamera.h>#include <boost/make_shared.hpp> using namespace gtsam;us
2022-03-08 22:16:28
207
原创 GTSAM 学习(一)
GTSAM(Georgia Tech Smoothing and Mapping)是基于因子图的C++库,它可以解决slam和sfm的问题,当然它也可以解决简单或者更加复杂的估计问题。主要由以下三个基本组成部分:因子图(factor graph):它属于一个二分图,由因子和变量连接而成。变量(variables):估计问题中的未知随机变量。因子(factors):非线性因子表示变量之间的约束,在slam中,可能为landmark或者odometry的读数。第一个简单的例子是单个因子、
2022-03-08 22:04:18
885
原创 A-LOAM学习笔记(四)
// This is an advanced implementation of the algorithm described in the following paper:// J. Zhang and S. Singh. LOAM: Lidar Odometry and Mapping in Real-time.// Robotics: Science and Systems Conference (RSS). Berkeley, CA, July 2014. // Modifi.
2022-03-07 09:47:27
283
原创 A-LOAM学习笔记(三)
// This is an advanced implementation of the algorithm described in the following paper:// J. Zhang and S. Singh. LOAM: Lidar Odometry and Mapping in Real-time.// Robotics: Science and Systems Conference (RSS). Berkeley, CA, July 2014. // Modifi.
2022-03-07 09:46:25
266
原创 A-LOAM 学习笔记(二)
// Author: Tong Qin qintonguav@gmail.com// Shaozu Cao saozu.cao@connect.ust.hk#include <ceres/ceres.h>#include <ceres/rotation.h>#include <eigen3/Eigen/Dense>#include <pcl/point_cloud.h>#inclu.
2022-03-07 09:44:43
149
原创 A-LOAM 学习笔记(一)
A-LOAM共有四部分kittiHelper.cpp: Kitti数据集读取;lidarRactoe.hpp: 激光雷达角点和面点提取,ceres实现最小最小化角点到线、面点到面的距离;laserOdometry.cpp: 计算相邻两帧间的位姿;laserMapping.cpp : 计算当前帧到地图的位姿并建图;// Author: Tong Qin qintonguav@gmail.com// Shaozu Cao .
2022-03-07 09:42:47
222
原创 vscode C++ HelloWorld编译和调试
环境:ubantu18.04 vscode一、打开vscode,安装C++扩展确保已经安装gccgcc -v#如果没安装sudo apt update # 更新软件包源 sudo apt-get install build-essential gdb二、hello创建文件夹hello,并在该文件夹下打开vscode新建文件hello.cpp#include <iostream>#include <vector>#i.
2022-02-21 16:20:22
1092
原创 livox_loam运行
第一次运行livox—Loam笔记源码地址https://github.com/hku-mars/loam_livox环境为:ubantu18.04 , ROS Melodic ,PCL ceresbuild Loam: cd ~/catkin_ws/src git clone https://github.com/hku-mars/loam_livox.git cd ../ catkin_make source ~/catkin_ws/...
2022-02-18 14:43:12
467
原创 A-Loam运行
第一次运行A—Loam笔记ALoam源码地址:GitHub - HKUST-Aerial-Robotics/A-LOAM: Advanced implementation of LOAM环境为:ubantu18.04 , ROS Melodic ,PCL ceresbuild A-Loam: cd ~/catkin_ws/src git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git cd .....
2022-02-18 13:52:05
595
2
原创 C++ 多线程(一)
线程算是一个底层的,传统的并发实现方法。C++11中除了提供thread库,还提供了一套更加好用的封装好了的并发编程方法。#include <iostream>#include <vector>#include <algorithm>#include <thread>using namespace std; //线程要做的事情就写在这个线程函数中void GetSumT(vector<int>::iterator first,v
2022-02-17 14:44:18
325
转载 C++ queue::push() and queue::pop()
queue::push() and queue::pop() in C++ STLC++ STL | queue::push() and queue::pop() functions: Here, we are going to learn aboutpush() and pop() functions of queue with the Example.Submitted byIncludeHelp, on November 26, 2018In C++ STL, Queue is a ty..
2022-02-17 14:06:04
333
原创 复习C++ sort函数(从大到小排序)
#include<iostream>#include<algorithm>using namespace std;bool comp(int a,int b);main(){ //sort函数第三个参数自己定义,实现从大到小 int a[]={45,12,34,77,90,11,2,4,5,55}; sort(a,a+10,cmp); for(int i=0;i<10;i++) cout<<a[i]<<" ";}//.
2022-02-17 10:15:10
310
原创 ubanut cmake opencv报错解决
学习slam是十四讲opencv引用错误,如图根据报错定位opencv的问题,逐步排查,首先排查一下opencv安装pkg-config --modversion opencv显示自己的安装版本所以opencv安装安装成功了;那就肯定是cmake有问题,增加下方的代码set( CMAKE_CXX_FLAGS "-std=c++11 -O3")find_package(OpenCV)include_directories(${OpenCV})完整如图所示完
2021-12-18 10:56:51
3322
原创 halcon 例程学习dyn_threshold
halcon mean+dyn_threshold的阈值指某一像素周围的阈值,周围直径参数值为目标的宽度2D+1;opening_circle理解为当开操作的圆在区域内放不下时delete,放得下时保留;closeing_circlel理解为连接比较近的两个区域;一般开操作成对存在,例如本例子先闭后开(连接区域后消除小毛刺)。* This example shows the use of the operator dyn_threshold for* the segmentation of th
2021-10-27 13:55:27
1296
原创 halcon blob分析 ball
目标区域相比背景区域灰度值较小,底部低灰度值横线容易对检测造成干扰,中间存在矩形区域与焊点区域灰度值相近。 首先应将图像四周边缘剪切掉,以免造成各焊点粘连,采用的方法是区域形状转换与reduce_domain结合的方式;然后用阈值分割提取焊点区域,开运算排除其他干扰,select_shape_std根据形状选择方形区域,用区域相减的方式得到最终焊点区域。最后求取各焊点的最小外接圆半径与中心坐标。* ball.hdev: Inspection of Ball Bonding* dev...
2021-10-27 13:39:02
47
原创 halcon阈值分割
最近的项目需要,halcon很多功能简单好用,比opencv更适合某些工业检测项目。halcon比oepncv易上手,在此记录halcon学习历程。第一个程序是找到图片中的白色标签,思路是通过阈值分割得到连通域,把每个连通域分割开,通过形状特征选择获得符合要求的连通域,最后用十字标把目标(矩形)中心绘制出来。原图代码,有详细注释* Image Acquisition 01: Code generated by Image Acquisition 01read_image (Imag.
2021-10-26 11:04:33
992
原创 pcl学习笔记
记录PCL学习过程中的报错:如图所示85行严重性 代码 说明 项目 文件 行 禁止显示状态错误(活动) E0312 不存在用户定义的从 "boost::shared_ptr<pcl::search::Search<pcl::PointXYZ>>" 到 "std::shared_ptr<pcl::search::Search<pcl::PointXYZ>>" 的适当转换 region_gr...
2021-09-03 10:03:45
321
原创 保存csdn网页为pdf,防止网页乱码
打开需要保存的网页选择浏览器 开发者工具选项 打开 console,复制以下代码即可。(function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announce, #ad_cen, #ad_bot").remove();$(".nav_top_2011, #header, #navigator").remove();$(".p4course_targ...
2021-07-07 11:05:21
378
原创 C++ vector 遍历修改汇总
通过迭代器、下标操作符、范围for三种方式遍历vector内部元素以及不同遍历方式修改元素。#include<iostream>#include<vector>using namespace std;int main(){ vector<int> ivec; for(int i = 0; i < 10; ++i) ivec.push_back(i); //遍历vector元素 //1: 利用迭代器...
2021-02-22 16:11:43
1510
原创 halcon相机标定参数转为opencv参数形式
由于条件限制拿到了halcon标定相机的参数,但由于自己畸变矫正采用opencv形式,但halcon官网给出5畸变系数到opencv不可转换。实际转换公式为:void calibParaL (Mat &cameraMatrix, Mat &distCoeffs){ double F = 6.2254672188473579e-03; double sx = 4.7992918037134185e-06; double sy = 4.799999999999...
2020-08-20 10:23:32
597
转载 std::ostringstream的用法
转载为了更好得学习,感谢原创大佬,感谢原创大佬!感谢原创大佬!原创 https://www.cnblogs.com/snowbook/p/5964434.html使用stringstream对象简化类型转换C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果你已习惯了<stdio.h>风格的转换,也...
2020-07-14 13:21:15
681
转载 string与char相互转换
转载为了更好得学习,感谢原创https://www.cnblogs.com/Pillar/p/4206452.htmlC++中string、char *、char[]的转换 头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会。现在从网上找了点资料,看了看,知道点东西了。 一、string转char*。 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); 1.data()方法,如:1 string str .
2020-07-13 15:47:44
25981
2
原创 读取文件夹下所有名字
bool getFiles(const std::string path, std::vector<std::string>& files, std::string postfix) { intptr_t hFile = 0; struct _finddatai64_t fileinfo; std::string p; if ((hFile = _findfirsti64(p.assign(path).append("/*.").append(po...
2020-07-09 18:19:08
146
原创 unsigned与Mat转换
unsigned char *ucImg = matImg.data; // Mat => unsigned char*Mat matImg = Mat(ysize, xsize, CV_8UC1, ucImg, 0); // unsigned char* => Mat
2020-07-09 16:43:19
241
原创 批处理文件名去掉()
CTRT+A全选后,(1)(2)。。。。。。。。文件名中含有括号,新建txt后修改为为.bat即可,内容如下。@Echo Off&SetLocal ENABLEDELAYEDEXPANSIONFOR %%a in (*) do (echo 正在处理 %%aset "name=%%a"set "name=!name:(=!"set "name=!name:)=!"ren "%%a" "!name!")exit...
2020-07-09 13:19:02
325
转载 vector「」.resize(int num)
转载是为了更好的学习,感谢原创大佬,感谢原创大佬,感谢原创大佬。看了公司几个前辈的代码,发现他们特别喜欢用Vector,而且总喜欢定义之后直接reserve一定的空间。在我的印象中reserve只是保留一定的空间而已好像没有多大的用处,然后就查了一下,发现reserve好像会直接去分配内存空间(虽然不会改变size)。于是写了一个小程序验证一下,结果发现,当数据量比较大的时候用reserve可以加快push的速度,于是又Get一个知识点。测试代码和结果#include<fs...
2020-07-06 14:08:38
140
原创 格雷码原理
最近学习结构光立体视觉,都i格雷码图案进行编码一直不理解,看了这张图恍然大悟。 应用投射器向被测景物连续投射如图所示的三幅图案,三幅图案中分别用亮暗两灰度将投射空间分为 8 个区域,其中亮区域对应编码“1”,暗区域对应编码“0”。将投射空间中景物上一点在三幅编码图案中的编码值按投射次序组合,得到该点的区域编码值,即可确定格雷码列坐标Pu。 ...
2020-07-01 10:14:08
736
转载 本质矩阵与基础矩阵
最近研究本质矩阵与基础,看了学习opencv3对里面的解释比较晕,完全摸不清里面的具体细节,找了一篇博客,感觉思路比较清晰。https://blog.csdn.net/baidu_38172402/article/details/83537149
2020-06-29 13:40:27
129
转载 计算机视觉学习笔记(四)homography 单应性矩阵的理解及求解
单应性矩阵的理解及求解1. 齐次坐标(Homogeneous Coordinate)一幅2D图像上的非齐次坐标为(x,y),而齐次坐标为(x,y,1),也可以写成(x/z,y/z,1)或(x,y,z)。齐次坐标有很多好处,比如可以很清楚的确定一个点在不在直线上:T(x)*I=0, T表示转置矩阵;还可以描述无穷远点:(x,y,0);还可以把平移和旋转写到一个矩阵里(也有不愿意这么干...
2019-09-16 20:14:23
6641
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人