自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

McQueen_LT的博客

talk is cheap, show me your code!

  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 多线程更新最大值

有一张图像,很大,假设10000x10000,需要找其中的最大值和最小值,可以使用opencv的cv::minMaxLoc,但是对于这样的大图来说太慢了。可以多线程并行找。

2024-08-09 20:10:16 170

原创 圆拟合 --- 点到圆距离绝对值之和最小

https://www.researchgate.net/publication/220146330_Robust_Fitting_of_Circle_Arcs 根据这篇文章介绍的算法进行了实现,经过验证结果与论文中结果一致。

2024-01-26 17:51:54 465

原创 CMake 编译并链接动态库

需要把mmath子项目编译成动态链接库并被CMP.cpp调用注意:需要有否则编译出来没有 .lib 文件,因为没有函数被导出。

2023-06-21 15:09:24 1623 2

原创 Modern OpenGL---做一些好玩的东西03 动态绘制点云模型

这次增加了一些键盘控制功能,通过 wasd 来控制 上下左右四个方向,通过x键来进行缩小,z键进行放大。大致思路就是通过注册一个键盘相应函数,来控制坐标和缩放因子,放大缩小只需要对坐标乘上缩放因子,上下左右平移只需要对坐标进行加减操作即可。然后通过uniform来将这些全局变量传入到顶点着色器中即可。代码:#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>#include <fstr

2021-08-31 14:46:53 1333

原创 Modern OpenGL---09 纹理(纹理单元可贴多个纹理)

对之前画的矩形基础上贴上纹理。在片段着色器中,声明一个采样器,表示纹理位置,每个纹理位置叫做纹理单元,比如 0、1等,当只有一个纹理事时,纹理单元默认为0,当有一个以上的纹理时,则需要通过uniform从外部设置每个纹理单元的值。需要注意的是,在一个以上的纹理绑定过程中,需要激活纹理单元的位置,然后进行绑定当前纹理。比如需要绑定第2个纹理时,需要先通过 glActiveTexture(GL_TEXTURE1),来激活位置为 1 的纹理单元,然后再通过 glBindTexture()来绑定纹理对象。(第1个

2021-08-12 17:18:57 590

原创 Modern OpenGL---做一些好玩的东西02 四个顶点同时闪烁的矩形

之前做了两个同时闪烁的三角形,是通过两个vao对象分别绘制三角形达到闪烁的效果的。那么如果将顶点的颜色属性作为顶点着色器的输出并作为片段着色器的输入,那么就能够分别对每个顶点的颜色单独绘制了,这样就能够使得每个顶点的颜色都不一样。那么如何使每个顶点闪烁起来呢?那么可以通过uniform来改变片段着色器中颜色变量中的某个值,比如只改变RGBA中的R值。代码:#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iost

2021-08-11 11:28:28 291

原创 Modern OpenGL---08 顶点着色器与片段着色器间的通信

一个顶点数据可能会包含多个属性,比如2维坐标和4维的颜色,那么一个顶点数据就有6个维度了。通过顶点着色器,将每个顶点的颜色传递到片段着色器中。传递颜色时,现在顶点着色器中声明一个输出颜色变量,然后再在片段着色器中声明一个输入颜色变量,这两个颜色变量的类型要一致,变量名也要相同,这样着色器程序就能够默认将这两个变量认为是同一个变量,就可以进行不同着色器之间的通信了。值得注意的是,在增加了顶点数组中的颜色属性的数据后,在后面创建vbo对象后复制顶点数据时,需要修改复制顶点数据的大小,同时在启用顶点属性指针时

2021-08-10 15:03:33 336

原创 Modern OpenGL---做一些好玩的东西 01(绘制两个同时闪烁的三角形)

在刚刚学习了现代OpenGL后,想做一些好玩的东西。这是第一个,想做两个三角形,然后这两个三角形的颜色会一直变化,就能达到闪烁的效果。绘制两个不同颜色的三角形的话,首先应该将顶点的索引分成两个ibo对象,然后通过两个vao对象来进行绑定,而顶点数据vbo对象可以共用两个,只不过需要在两个vao对象上分别绑定一次;不同颜色的三角形,则需要两个不同的片段着色器(疑问:能否只用同一个片段着色器达到两种不同的颜色?),然后分别在不同的FragmentShader中设置不同的颜色,然后在窗口循环中进行渲染时,分

2021-08-10 13:11:56 412

原创 Modern OpenGL---07抽象化VertexBuffer和IndexBuffer

这节课将原本在主函数中的对创建的VertexBuffer和IndexBuffer抽象成一个类,逐渐C++化。值得注意的是,主函数中需要额外添加一对“{}”,来防止由GLCall()导致的死循环。#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>#include <fstream>#include <string>#include <sstream>

2021-08-08 16:28:17 542

原创 Modern OpenGL---06 使用GLFW_OPENGL_CORE_PROFILE,绑定VertexArray

在使用GLFW_OPENGL_COMPAT_PROFILE时,内部有一个默认的glBindVertexArray()过程,当在glfwWindowHinit()初始化时,使用了GLFW_OPENGL_CORE_PROFILE,则需要通过显示创建一个VertexArray(VAO),并将其绑定,绑定后,每当需要绘制这些vertices时,只需要绑定vao即可,不需要再绑定buffer和glEnableVetexAttribPointer()了,方便很多。代码:#include <GL/glew.h&

2021-08-08 15:19:41 740

原创 Modern OpenGL---05 使用uniform改变shader的颜色

可以通过 glGetUniformLocation()获得指定着色器所在的location,然后使用glUniform4f() 为着色器中的颜色进行赋值或修改。在while循环中利用glUnifor4f()修改颜色可实现动画。#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>#include <fstream>#include <string>#include

2021-08-08 12:57:43 314

原创 Modern OpenGL---04 OpenGL函数错误的处理

在写opengl函数过程中,容易出现编译通过了,但是出来的窗口确实黑的,或者跟预期的不一样,那么就说明应该是某个函数出错了,其中默认类型转换就是最容易出现的错误,比如 GL_UNSIGNED_INT 被 错误的写成了 CL_INT,这样就会导致整个函数失效了。可以通过宏定义来解决这个问题,就是通过定义一个宏函数,然后将每个gl函数都用这个宏函数调用,这样可以实现对每个函数进行检测是否出现了错误,并且在控制台打印出错的具体位置。另外,如果在调试模式下(F5),会直接在出错的地方break,能够直接定位到错误

2021-08-07 23:20:33 367

原创 Modern OpenGL---03 绘制矩形(两个三角形)

在 02 的基础上可以增添到6个顶点,来依次绘制6个顶点(2个三角形)可以得到一个四边形,但是其中有2个点是重复的,这样会浪费内存,所以可以通过创建一个 索引缓存(indices buffer)来存储position数组中需要绘制的点的索引顺序,然后将indices buffer与position一样绑定到GPU内存中。代码#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>#include

2021-08-07 22:06:12 388

原创 Modern OpenGL---02 着色器文件的处理(新建.shader文件)

目录结构代码#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>#include <fstream>#include <string>#include <sstream>struct ShaderProgramSource{ std::string VertexSource; std::string FragmentSouce;};s

2021-08-07 19:12:03 682

原创 Modern OpenGL---01 用顶点着色器和片段着色器绘制红色三角形

代码:#include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>static unsigned int CompiledShader(unsigned int type, const std::string &source){ unsigned int id = glCreateShader(type); //创建一个着色器 const char* src = sour

2021-08-07 14:59:40 353

原创 SLAM学习之路---深度图序列合成场景点云

一、概述上一篇博客绘制了相机的轨迹,那么有了相机轨迹之后能干什么呢?本篇博客将通过相机轨迹对点云进行拼接合成一个完整的室内场景。合成一个场景需要很多个点云,而这些点云则是通过深度相机扫描得到的一系列深度图序列转换得到的。在 深度图转换成点云 这篇博客中,使用了 http://redwood-data.org/indoor/dataset.html 网站上的深度图转换成点云。下载了深度图序列文件和相机的轨迹文件,当时还不知道相机轨迹文件的作用是什么,看着网站上的介绍也是云里雾里的,后来过了很久才知道相机轨

2021-07-27 16:57:27 1654 2

原创 SLAM学习之路---绘制相机轨迹

一、概述相机轨迹指相机在运动过程中每一帧的相机位姿由第一帧的相机位姿通过刚体变换(旋转矩阵和平移向量组成一个4x4的变换矩阵)而得到的,而这一系列的变换矩阵则组成了该相机的运动轨迹。本篇文章通过学习《视觉SLAM十四讲》第二版第三讲来记录。二、轨迹绘制思路以第一帧对应的相机位姿为参考,可将第一帧位姿的原点设置为世界坐标系原点,第一帧的x轴为(1, 0, 0),y轴为(0, 1, 0),z轴为(0, 0, 1)。从相机轨迹文件中得到每一帧的变换矩阵,从第二帧开始,每一帧的变换矩阵乘上第一帧的相

2021-07-25 14:43:35 3554 1

原创 SLAM学习之路---双目相机照片生成点云(附C++代码)

一、概述本文记录如何根据双目相机得到的两帧图片数据来计算出三维点云。这里主要涉及到双目视觉的成像原理,在《视觉SLAM十四讲》第2版的第五讲中有详细介绍。本文的代码根据书上给出的代码进行编写,数据来自https://github.com/gaoxiang12/slambook2/tree/master/ch5/stereo。二、双目相机模型众所周知,单目相机是没法确定照片中的某个像素在三维空间中的具体位置的,因为它损失了深度信息。而双目相机就像人的双眼一样,可以根据左右眼看到物体的视差来确定深度,当人

2021-07-18 17:56:24 10031 8

转载 CGAL 凹包(alpha-Shape)

本文转自https://doc.cgal.org/latest/Alpha_shapes_2/index.html。IntroductionAssume we are given a set S of points in 2D or 3D and we would like to have something like “the shape formed by these points”. This is quite a vague notion and there are probably many

2021-07-14 17:49:41 3151 4

原创 PCL点云边缘检测源码解析(过程记录)---AngleCriterion (附C++代码)

一、概述在PCL中集成了一个非常经典的点云边缘检测算法,这个算法也在 PCL边缘检测 这篇博客中讲解了。那篇文章中只介绍了AC算法的思想步骤以及它的接口调用。那么它的内部具体是如何实现的呢,如果知道了它的具体实现,那么在某些情况下,就可以直接在它的源码基础上做一些小的改动,就能够更好地适应不同的需求了。这里只对AC边缘检测算法做个源码解析及修改后调用的过程记录,若以后需要解析其他PCL功能,也可以借鉴一下。二、PCL边缘检测源码(AC)定位过程首先,定位什么功能的源码,前提是已经知道了它调用的接口是

2021-06-29 09:33:55 7125 11

原创 如何提取出MeshLab中计算法线的功能---详细过程记录

一、概述最近复现了几个点云相关的算法,复现完成后进行测试。由于算法的输入要求点云具有法线,所以一开始进行测试的时候,利用MeshLab对点云进行了法线的计算。但是后来在对算法封装的时候,在内部用了PCL的NormalEstimation来计算点云法线。封装完成后进行测试时发现输出的结果与之前测试相比差了一些。后来排查问题的时候发现原因就是出在法线计算上。在对比了PCL计算的法线与MeshLab计算的法线后得到结论:PCL计算的法线没有MeshLab计算的法线精准。所以问题来了,就要去看MeshLab的源码

2021-06-23 16:55:49 2515 6

原创 PCL点云边界特征检测 (附完整代码 C++)

一、概述点云特征在定义上(以我个人理解)大致可以分为两大类:一类是类似于深度学习的featrue map意义,通过计算一些算子来描述点云局部,这种描述只是一种标识符,并没有实际的几何意义,比如 PFH或者 FPFH 之类的,它们只是通过对每个点的局部邻域计算一个 125125125 维或者 333333 维的向量来描述当前点,这跟机器学习中的 featurefeaturefeature 是一样的,通过这类特征可以用来做点云的配准(其中某些特征可以进一步处理【模式识别】得到几何特征,因为某一类的几何特征在

2021-06-22 11:58:45 14671 12

原创 点云配准算法---ICP(迭代最近邻点)详解 附C++代码

一、概述现在是2021.6.2晚21:24,闲着也是闲着,写个ICP吧,再从头到尾思考一遍,做一个详细的记录。ICP算法是一种点云配准时常用的方法,它是一种细配准方法,通常在配准时要配合其他粗配准方法进行使用,先将两帧差异非常大的点云进行粗配准,得到初步具有重合部分的点云,然后再利用ICP将其进一步配准,使得重合区域最大。二、ICP思想步骤ICP:Iterative Closest Point,顾名思义,这是一种迭代的思想。通过不断地迭代,每次在前一次的计算结果之上再计算出新的变换矩阵,最终当迭代次数

2021-06-08 17:41:01 8173 4

原创 保持结构的非监督特征选择(Structure Preserving Unsupervised Feature Selection)--- 机器学习大作业

一、概述机器学习大作业。机器学习课程最后要求实现一篇论文,这里做一下记录。二、实验内容这里只放上最重要的部分。本次课程论文需要实现的算法如算法1所示:2.1 权重矩阵预计算根据算法1可知,输入数据为原始数据X∈Rn×dX\in\R^{n\times d}X∈Rn×d,权重矩阵SSS,参数α\alphaα和β\betaβ,以及需要从原始数据中筛选出的特征数hhh,而输出为hhh维被筛选出来的特征,即X∈Rn×hX\in \R^{n\times h}X∈Rn×h。此外,权重矩阵SSS需要根据原始数

2021-05-21 11:46:11 861 7

原创 STL的vector::resize() 和 vector::reserve()区别和作用详解

一、概述现在数组基本都用vector了,很方便,但可能对vector的某些属性还不是很了解。以前只是大概知道reserve和resize是分别干什么的,但是并不了解它们的真正目的是什么,今天仔细回顾了一下,终于弄懂了,现在做个记录。二、区别和作用1. resize() 设置有效空间,reserve() 设置总体容量通俗点说,假如蔡徐坤要开演唱会,地点定在了A体育馆,这个体育馆可容纳500050005000人。在演唱会开始前卖票,发现销量不是很好,只卖出去了大概300300300张票,但为了保险起见(

2021-04-12 22:55:14 931 1

原创 排序算法总结一(冒泡排序、选择排序、插入排序) C++代码实现

一、概述想整理排序算法好久了,终于被我逮到机会,来好好梳理一下,先来介绍一些比较简单的排序,本文就讲一下冒泡排序、选择排序、插入排序吧二、思想解释(图片来自菜鸟教程)什么是稳定排序?相同数字在排序之后的相对位置没有改变即为稳定排序。冒泡排序是稳定排序,时间复杂度O(N2)O(N^2)O(N2),空间复杂度O(1)O(1)O(1)int mergeNums(vector<int>& nums, int left, int right){ int i = left

2021-04-09 11:21:01 196

原创 排序算法总结三(堆排序)详解 C++代码实现(包括建造最大堆)

一、概述最近在复习算法和数据结构,一直以来对堆(heap)不是特别熟练,今天算是好好从头到尾梳理了一下,现在做个记录,以后可别再忘了。二、构造最大堆1. 最大堆的定义(性质)算法导论上是这么说的二叉堆可以分为两种形式:最大堆和最小堆。在这两种堆中,结点的值都要满足堆的性质,但一些细节定义则有所差异。在最大堆中,最大堆性质是除了根以外的所有节点 iii 都要满足:A[PARENT(i)]>=A[i]A[PARENT(i) ]>= A[i]A[PARENT(i)]>=A[i], 最

2021-04-08 17:56:25 511

原创 Windows下暗黑风格设置

一、概述喜欢暗黑风,手机早就设置成了暗黑模式,轮到电脑了。Windows10是可以自己设置深色主题的,而浏览器可能得自己设置,这里介绍两种主流浏览器的设置方法以及office的主题设置。二、设置方法1. Windows系统主题设置设置步骤如下:另外,Windows提供了很多好玩的主题颜色设置,可以在个性化设置中自行探索。2. Chrome浏览器在地址栏输入 chrome://flags 进入如下界面:搜索Force Dark Mode,改成 Enabled即可。3. Edge浏览器

2020-12-16 15:53:05 1154

原创 HTML练习之吃豆豆小游戏

一、概述闲来无聊,稍微学一点HTML的知识,动手写一个吃豆豆的小游戏,感觉蛮好玩的。这里把代码放在这,以防以后用的上,可以参考。二、代码已经将重点部分注释了,用的animation很有意思,方便,快捷。<!doctype html><html> <head> <meta charset="utf-8"> <title>吃豆豆</title> <style> .mouth{ width:

2020-12-16 15:26:30 996

原创 windows C++查找指定目录下所有文件

代码vector<string> findfile(string path, string mode){ vector<string> files; _finddata_t file; intptr_t HANDLE; string Onepath = path + mode; HANDLE = _findfirst(Onepath.c_str(), &file); if (HANDLE == -1L) { cout << "can not

2020-12-03 17:57:20 711

原创 对点云添加高斯噪声并保存到本地(PCL 附C++代码)

代码#include <stdio.h>#include <stdlib.h>#include <pcl/point_types.h>#include <iostream>#include <pcl/io/ply_io.h>#include <pcl/io/pcd_io.h>#include <pcl/features/normal_3d.h>#include <pcl/visualization/cl

2020-11-25 18:31:24 1325 1

原创 点云pcd格式与ply格式互相转换

1. pcd转ply#include <iostream>#include <pcl/io/ply_io.h>#include <pcl/io/pcd_io.h>using namespace std;int main(){ pcl::PointCloud<pcl::PointXYZ>::Ptr cloudOrigin(new pcl::PointCloud<pcl::PointXYZ>); //pcl::PLYRe

2020-11-16 17:31:50 2740

原创 3D网格模型边界检测(附Python完整代码)

一、概述近期有需求要对三维网格模型的边界进行检测提取,虽然在meshlab中可以直接显示出三维网格模型的边界,但是经过我各种摸索最后发现好像没有方法能够将显示出的边界信息保存下来,没办法,只能自己手写一个检测方法了。而恰好三维网格模型的边界检测非常简单,只需要根据其拓扑结构,找到只属于一个面的边即为边界。虽然实现出来了,但是在效率上比较低,对点数较多的模型,需要耗费较多的时间,只用几次,我也懒得优化了。二、代码没什么好说的,思想很简单,就是找到只属于一个面的边,把这条边包含的点标记为边界点即可。fi

2020-10-13 17:33:52 4834 2

原创 如何把 .wrl 文件转成 .ply 文件(python 一次性转换目录下所有文件)

一、概述wrl :virtual reality world最近在找一些大场景点云文件,找到了一些 .wrl 文件,但是这些文件需要专门的软件打开才能显示,而我一般用的都是meshlab,所以需要转成 .ply 文件。所以就用Python将指定目录下的所有 wrl 文件一次性转成 ply 文件,并存储到另一个指定目录下。二、代码代码中 wrl 就是需要被转的wrl文件所在目录,ply 就是转为ply文件后所要存储的目录,根据实际情况自己确定。import ospath = "E:/QTPro

2020-09-22 12:04:56 1640 5

原创 3D点云模型下载网站

Updating…网站名称地址知末https://3d.znzmo.com/mf3dmx/dymxzjw/p_6.html 大量物体模型,免费下载3D shape repository http://visionair.ge.imati.cnr.it/ontologies/shapes/ 搜索关键词下载,免费普林斯顿模型库https://shape.cs.princeton.edu/benchmark/ 数据有限,经典模型,免费Georgia Inst

2020-09-21 20:27:01 10172

原创 解决cuda官网安装包下载速度慢的问题

一、概述最近在ubantu系统下配置cuda环境,来来回回折腾了好几天,最后终于弄通了,发现也就那样。在这个过程中因为cuda版本和ubantu驱动版本不对应的问题卸载重装了好几个版本的cuda,其中下载cuda安装包的时候是最耗费时间的,昨晚找到了一个好办法能够将下载速度提升10倍以上!二、迅雷,永远滴神!一般安装cuda都会去cuda官网下载对应系统的安装包。如果我需要下载cuda9.0,就会进入如下网页:在选择了对应的系统版本之后,点击Download下载,这时候浏览器就会帮你下载该安装包,

2020-09-20 13:55:22 19030 14

原创 PCL提取3D点云模型特征(3.0 FPFH快速点特征直方图)附完整代码

一、概述上一篇博客解释了PFH是什么以及如何利用PFH来提取点云的特征,那么讲了PFH(PCL提取3D点云模型特征(2.0 PFH点特征直方图 )附完整代码)之后肯定是要接着说FPFH的。本来想着把FPFH的内容和PFH放在一起的,但是感觉如果放在一起写再加上最后的代码(毕竟每篇博客能加代码的我都会把代码贴出来,毕竟talk is cheap, show me your code嘛),就感觉一篇博客的内容就太多了,不仅写起来累,看起来也累,所以就分开吧。与PFH方法类似,在目前所有网上看到的资料中,都没

2020-07-22 15:52:32 4709 25

原创 PCL提取3D点云模型特征(2.0 PFH点特征直方图 )附完整代码

一、概述之前在做本科毕业设计的时候,就用到了 PFH(Point Feature Histogram)和 FPFH(Fast Point Feature Histogram),这两个方法都是Rusu这个大佬提出来的。最开始他提出了PFH作为一个signature来描述点云邻域内的属性,利用这种性质来对点运做registration。但是PFH存在过多的冗余计算,导致效率很低,在此基础上,他又提出了FPFH来提升计算效率。在刚开始接触到这两个特征描述子之前,对这两个方法一无所知,在网上也找了很多资料和帖子,

2020-07-21 17:55:24 3782 5

原创 Loop 细分曲面(loop subdivision)详解,附Python完整代码

一、概述在做完了 catmull−clarksubdivisioncatmull-clark\quad subdivisioncatmull−clarksubdivision 之后,紧接着继续做 loopsubdivisionloop\quad subdivisionloopsubdivision,但是跟之前一样,网上的帖子都是直接给出了各个控制点新增或更新时,所有相关点的权重,并没有给出具体过程是怎么做的,而且在做 looplooploop细分 的时候并没有像之前一样有完整的“保真代码”(能够体现出具体

2020-06-01 16:53:52 9659 5

原创 Catmull 细分曲面 (Catmull-Clark subdivision) 详解 附Python 完整代码

一、概述高级计算机三维建模课程最后需要提交一个大作业,比较Catmull-Clark细分曲面与Loop细分曲面算法。先把Catmull-Clark细分曲面弄懂了,这里做个记录。昨天一直在网上找Catmull-Clark细分曲面相关的解释教程,但是并没有找到比较详细的计算过程说明,只有一些简单的示意图,并不能帮助我很好的理解,说实话,并没有看懂。知道后来,发现了Catmull–Clark subdivision surface这个网页,里面有各种语言版本的Catmull-Clark细分曲面的实现代码,其中P

2020-06-01 16:52:25 14124 13

livingroom01500frame.ply

这是通过在qianyi.info网站中下载的深度图像,根据网页中提供的相关方法进行转换得到的点云场景数据,具体转换方法可以查看https://blog.csdn.net/McQueen_LT/article/details/100011885这篇博客。

2019-09-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除