自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 SW:转子发动机

转子发动机建模

2022-07-30 15:34:41 402 2

原创 边缘检测(matlab)

自从搞了简单的文字识别之后,就在考虑机器视觉还能为我的研究生盆子上镶点什么金边,简单搜了一下文献,对于刀具磨损的视觉识别还是不少的,但是要么是拆下来拍照检测,要么是固定在某个位置检测,机器视觉还没有真正实现在机检测,又去某国内学术网站搜了一下,发现这个东西够一篇硕士毕业论文了,那还是简单搞搞吧。wear tool应该与new tool进行轮廓对比,所以就需要得到两种刀具的轮廓。下面是我的new tool和wear tool:边缘检测就是算法,直接上代码了。...

2022-07-03 10:28:16 5436 1

原创 票据信息识别(Matlab)

机器代替人力也应该在小企业内快速实现吧

2022-07-03 09:57:34 655 2

原创 SLAM - 回环检测

回环检测 feature_training.cpploop_closeure.cppgen_vocab_large.cpp https://blog.csdn.net/weixin_53660567/article/details/121750728https://blog.csdn.net/weixin_53660567/article/details/121750728

2022-07-03 09:01:19 231

原创 SLAM - 后端 - 2

pose_graph_g2o_SE3.cpp#include <iostream>#include <fstream>#include <string>#include <g2o/types/slam3d/types_slam3d.h>#include <g2o/core/block_solver.h>#include <g2o/core/optimization_algorithm_levenberg.h>#inc

2022-05-30 09:26:56 293

原创 SLAM - 后端 - 1

g2o图优化法:g2o_bal_class.h#include <Eigen/Core>#include "g2o/core/base_vertex.h"#include "g2o/core/base_binary_edge.h"#include "ceres/autodiff.h"#include "tools/rotation.h"#include "common/projection.h"//g2o自身顶点类型://VertexSE2 : public Base

2022-05-26 09:31:59 276

原创 SLAM - 搭建VO框架 - 3

0.3:RANSAC PnP 加上迭代优化 来估计相机位姿g2o_types.h/* * <one line to give the program's name and a brief idea of what it does.> * Copyright (C) 2016 <copyright holder> <email> * * This program is free software: you can redistribute it and/

2022-05-17 15:21:56 359

原创 SLAM - 搭建VO框架 - 2

使用两两帧的视觉里程计,定义当前帧和参考帧两个概念,以参考帧为坐标系,将当前帧与其进行特征匹配,并估计运动关系。流程如下:1、对新来的当前帧提取关键点和描述子2、如果系统未初始化,以该帧为参考帧,根据深度图计算关键点的3D位置,返回13、估计参考帧与当前帧间的运动4、判断上述估计是否成功5、若成功,把当前帧作为新的参考帧,回16、若失败,计连续丢失帧数。当连续丢失超过一定帧数,置VO状态为丢失,算法结束。若未超过,返回1对应的头文件及实现:visual_odometry.

2022-05-16 15:45:28 237

原创 SLAM - 搭建VO框架 - 1

来自《slam十四讲》头文件都放在一个myslam的命名空间内common_include.h包含共同使用的头文件,减少多个类中引用头文件的复杂性#ifndef COMMON_INCLUDE_H#define COMMON_INCLUDE_H// define the commonly included file to avoid a long include list// for Eigen#include <Eigen/Core>#include <Eig

2022-05-12 15:21:14 345

原创 SLAM - 视觉里程计 - 直接稀疏、半稠密法

direct_sparse.cpp#include <iostream>#include <fstream>#include <list>#include <vector>#include <chrono>#include <ctime>#include <climits>//一些类型的最值库#include <opencv4/opencv2/core/core.hpp>#include.

2022-05-09 16:04:08 636 1

原创 LeetCode(CPP):一月刷完热题100(5)

33.搜索旋转排序数组(mid)思路:由于输入的数组部分有序,可以采用二分查找法;首先要判断数组中是否有足够判断的元素个数,如果数组无元素,返回-1;只有一个元素则比较是不是target;二分查找:因为是部分有序,要判断target是否在这个区域里,左侧用nums[0] <= target && target < nums[mid],右侧用nums[mid] < target && target <= nums[n - 1]。找不到

2022-05-07 16:41:56 121

原创 SLAM - 视觉里程计 - LK光流法

CMakeLists.txt:cmake_minimum_required( VERSION 2.8 )project( 项目名 )set( CMAKE_BUILD_TYPE Release )set( CMAKE_CXX_FLAGS "-std=c++11 -O3" )find_package( OpenCV )include_directories( ${OpenCV_INCLUDE_DIRS} )add_executable( 项目名 main程序.cpp )target_.

2022-05-06 16:09:15 329 1

原创 LeetCode(CPP):一月刷完热题100(4)

21.合并两个有序链表(easy)思路:连接两个单增的链表,连接完依然有序,就比较两个结点值得大小,谁大就在后面。有了这个基本思路之后,可以在两个链表上分别维护一个指针,用来比较两个指针所指的结点的大小,然后按递增的方式连接。连接将创建一个新链表,设置指针*p3,那么遍历中两个链表较小的一个连接在p3->next,然后较小链表结点上的指针后移一位,p3后移一位,这样就构成了循环体。注意一种情况:一个链表遍历完毕,则直接把另一个链表剩余的结点接在新链表尾部即可。一个小点:为新链.

2022-05-06 15:24:48 734

原创 LeetCode(CPP):一月刷完热题100(3)

11. 盛水最多的容器(mid)思路:在左右两侧分别维护一个指针,每次计算两个指针之间可以容纳水的容积,这个计算满足”木桶效应“,即以短边为准。指针移动的依据是,哪边短就移动哪边。维护一个ans来记录此过程中的容积最大值。//双指针class Solution{public: int maxArea(vector<int>& height){ int l=0,r=height.size()-1;//分别从左右开始的两个指针

2022-04-23 17:23:38 1159

原创 LeetCode(CPP):一月刷完热题100(2)

6.Z字形变换(mid)class Solution {public: string convert(string s, int numRows) { int n=s.length(),r=numRows; if(r==1||r>=n){return s;} string ans;//创建一个数组用于存储新的字符串数据 int T=2*r-2;//周期中元素个数,就是一个Z包含的列数 .

2022-04-23 15:24:18 1253

原创 LeetCode(CPP):一月刷完热题100(1)

开玩笑的,我一个月刷不完1. 两数之和(easy)不要给我说什么哈希查找,我不懂。看到题,啪一下就想到了两层暴力循环,注意很快哈。1. 暴力枚举class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int>& num=nums; for(int i=0;i<num.size()

2022-04-17 17:38:36 456

原创 C++:模板

进入泛型编程学习阶段。泛型编程主要利用模板。模板 - 人如其名,就是建立一个通用的模具,大大提高代码的复用性。需要注意的是模板只是一个框架,而不能直接使用。并且模板的通用并不是万能的。共有两种模板机制:函数模板、类模板函数模板:建立一个通用函数,其函数返回值类型和形参类型可以不具体确定,用一个虚拟的类型来代表。语法:template<typename T>函数声明或定义声明T为通用数据类型,就是不确定是哪一类型,用T代表;template声明创建模板;ty

2021-12-20 22:32:52 323

原创 C++:文件操作

一个月前的东西了,漏了,现在补上。怪不得感觉文件操作很不熟悉。文件操作是一个很重要的内容,用来访问文件中的数据和改写文件中的内容。文件操作有其专属的头文件:#include<fstream>文件中的数据有两种存在形式://文本文件 - 文件以文本的ASCII码存储在计算机中//二进制文件 - 以文本的二进制形式存储在计算机中,用户一般不能直接读懂三种操作:ofstream:写操作 ifstream:读操作 fstream:读写操作其基本知识如下:..

2021-12-15 16:01:14 2403

原创 C++:职工管理系统

职工管理系统学这个很痛苦,感觉又臭又长,逻辑性不高,现在自己再来复习一遍,希望能找到逻辑。下面的顺序是按照资本压榨等级排序的,因为我天天被压榨。头文件:workermanager.h主要是构建了WorkerManager这个对象,在这个对象中,声明了职工管理系统所用的功能函数,包括统计人数、初始化职工、显示职工、删除职工、判断此人是都存在、修改信息、查找、排序、清空、展示等一系列功能。还有构造函数和析构函数。构造函数(手动打星):构造函数用于创建类的实例,并对实例进行初始化操作,

2021-12-14 20:40:06 1069

原创 C++:多态(面向对象三大特征之一)

其实早就学完了,问就是忙于科研。在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。(百度百科)我的理解是:多态就是为了在 继承了父类的每个子类 中 重新定义 父类中的成员函数,使每个子类中的成员函数具有多态性。多态动态多态要满足以下条件:1、有继承关系2、子类重写父类的虚函数动态多态的使用:父类的指针或引用指向子类的对象下面举个栗子:

2021-12-08 15:57:49 466

原创 C++:继承(面向对象三大特性之一)

继承面向对象的三大特征:封装、继承、多态封装较为简单,就是把客观事物封装成抽象的类,并且类可以把自己的属性和行为只让可信的类或者对象操作,对不可信的进行信息隐藏。前面我们一直在用封装。本文所讲的继承,可以使用已存在类的所有功能,并在无需重写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。语法如下:类A继承类B的所有特征 - class A:public BA类就是上述所

2021-12-02 16:35:51 130

原创 C++:类与对象4

运算符重载即:对已有的运算符(加减乘除等号)重新定义,赋予另一种功能,以适应不同的数据类型1、加号运算符 - 实现两个自定义类型的相加

2021-12-01 10:54:03 604

原创 C++:类与对象3

继续写一下类和对象的一些知识;类中的成员变量和成员函数是分开存储的,只有非静态成员变量才属于类的对象上,静态成员变量存储在静态区。在下列代码中,分别定义非静态成员变量和静态成员变量,来计算类的对象的大小,以验证创建的变量是不是存储在类上。计算类的大小所用的函数为:void test01(){ Person p; cout << "size of p =" << sizeof(p) << endl;}首先应该明确: 空对象占用...

2021-11-25 17:09:12 591

原创 C++: 类与对象2

对象的初始化和清理 首先介绍一下构造函数和析构函数,构造函数主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析...

2021-11-24 16:47:59 389

原创 C++:类与对象1

C++面向对象具有三大特征:封装、继承、多态首先是封装:封装就是将属性和行为作为一个整体来表现事物,并将属性和行为加以权限控制。就是程序段封装进一些东西使其变得完整。类的表示方法为 class 类名;在类中,具有三种访问权限,分别为public(公共)、protected(受保护的)和private(隐私)。下文详谈。比如:设计一个圆类,来求圆的周长求周长需要用到公式2*PI*半径,所以半径要作为圆的一个属性举求圆周长例子来说明类的组成和封装方式:class Circl

2021-11-22 22:17:09 374

原创 C++相对于C语言的一些基本知识

重度懒惰和拖延症的我跳过了C语言预处理,直接跳到了C++,C++是包含C的,所以一些基础的知识我就直接跳过了--------------------------------------------------------------------------------首先是new操作符:其作用是在堆区开辟空间,相当于C中的malloc函数,堆区的解释见文章最后。基本语法如下:1、在堆区开辟整型数据int* func(){ //在堆区创建整形数据 //new返回是 该数据类型的

2021-11-17 15:25:01 285

原创 C:动态内存分配(3)

柔性数组 - 在结构体中定义数组时,并不指定数组的大小,后面用malloc函数为数组开辟空间。使用案例如下:struct S{ int n; int arr[];//未知大小,或arr[0] //柔性数组成员 - 数组的大小是可调整的};int main(){ struct S s; printf("%d\n", sizeof(s));//4 并不包含柔性数组的大小 struct S* ps = (struct S*)malloc(sizeof(struct S)+5*s

2021-10-24 19:24:44 2177

原创 C:动态内存分配(2)

在动态内存分配中,比较经典的错误案例如下:案例1:原代码:void getmemory(char* p)//应改为char** p{ p = (char*)malloc(100);//没有把开辟的空间地址传回test函数中的str中 //应改为*p}void test(void){ char* str = NULL; getmemory(str); strcpy(str, "hello world");//str没有指向有效空间,程序崩溃 printf(str);}in

2021-10-21 19:15:03 72

原创 C:动态内存分配(1)

栈:在函数内部声明的所有变量都将占用栈内存。用于存放局部变量、函数的形参; 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。用于动态内存分配; 静态区:用于存放全局变量、静态变量(例如static int)。局部变量和局部数组在栈区开辟空间;全局变量和全局数组在静态区开辟空间;本部分主要包括malloc、free、calloc和realloc四个函数的应用:struct S{ char name[20]; int age;};int main(){ /

2021-10-20 17:52:49 170

原创 C语言:通讯录

contact.h作为整个项目的头文件,该代码段具有以下功能:1、引入项目所需要的头文件;2、定义MAX和MAX_...等常量,在后续调整程序时,只需要调整头文件中的定义;3、定义枚举,在switch语句中将0、1、2、3、4等数字替换为EXIT、ADD、DEL、SEARCH等代称,增强代码可读性;4、定义结构体变量,用于存储通讯录各类信息和当前通讯录的大小;5、声明函数。#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.

2021-10-17 21:46:42 9387

空空如也

空空如也

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

TA关注的人

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