自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

@way

喜欢Coding

  • 博客(33)
  • 收藏
  • 关注

原创 单应性矩阵Homography计算和优化

单应性矩阵,是用来描述两个平面之间的变换关系,是一个3x3的齐次矩阵。图上的4个绿色的圈,两两可以对应,H可以表达第一张图变换到第二张图的转换关系。具体的表达式:aaa表示尺度信息,h1−h9h_1-h_9h1​−h9​表示HHH矩阵,HHH矩阵有8个自由度,h9=1h_9=1h9​=1,所以只需要4对点就可以计算出。首先展开:然后可以前两式比上第三式,这样可以把系数aaa约掉。并让等式右边等于0。展开成矩阵的形式 $A_ih = 0 $的形式把所有点对都考虑进来 Ah=0Ah=0Ah

2020-12-04 18:22:58 7138 5

原创 对极几何的基础矩阵和本质矩阵3

对极几何系列篇:对极几何的基础矩阵和本质矩阵1对极几何的基础矩阵和本质矩阵2前面介绍了对极几何的原理和基础矩阵F的求解,接下来介绍如何求解E矩阵和根据E矩阵分解相机的姿态 R和t。世界坐标点P,在两个相机上的投影分别为p1,p2, 内参矩阵为k1, K2, 外参为[R1 T1], [R2 T2]计算E矩阵根据基础矩阵FF=K2−TEK1−T F = K^{-T}_2EK^{-T}_1F=K2−T​EK1−T​K1,K2是已知的,因而可以根据F矩阵计算E,E矩阵是奇异矩阵,det(E)=

2020-12-27 21:23:28 617

原创 对极几何的基础矩阵和本质矩阵2

上一篇文章介绍了基础矩阵F和本质矩阵E1,下面主要介绍如何求解F矩阵。求解基础矩阵,F的自由度为5,理论上5对点就可以求解,但是考虑到非线性的关系和约束问题,并且具有尺度不变性, 常用的是8点法。假设有一组匹配的图像点,可以通过特征点匹配获得。pi=[uivi1]pi′=[ui′vi′1]p_i = \left[\begin{matrix} u_i \\ v_i \\ 1 \end{matrix}\right] p^{'}_i = \left[\begin{matrix} u^{'}_i \\

2020-12-21 17:08:31 446

原创 对极几何的基础矩阵和本质矩阵1

对极几何是两幅视图之间内在的射影几何。存在3维空间点,在两个不同的视角拍摄,在两幅图中分别存在两个图像点,这两个图像点之间具有某种几何关系。本文就主要推导他们之间的关系。O1和O2 为两个相机中心, O1与O2的连线与两幅图的交点e1和e2称为极点,p1和p2 分别是世界坐标点P在两个相机上的投影点。p1e1、p2e2为极线,PO1O2构成的平面为极平面。令p1e1的线为l1, p2e2的直线为l2。事实上P在O1上的投影点p1, 如果想确定P在O2的投影位置,那么p2一定在O2中的l2线上。根据相

2020-12-20 15:45:00 627 2

原创 Qt+OpenCV插件开发示例

#ifndef EDGE_DETECTOR_PLUGIN_H#define EDGE_DETECTOR_PLUGIN_H#include "edge_detector_plugin_global.h"class EDGE_DETECTOR_PLUGINSHARED_EXPORT Edge_Detector_Plugin{public: Edge_Detector_Plugin();};#endif // EDGE_DETECTOR_PLUGIN_H#ifndef EDG..

2020-12-15 17:21:49 641 1

原创 三角测量计算点的三维坐标

三角测量(triangulation), 就是在不同的姿态下观察同一个对象,根据图像上的同名点的像素坐标,计算对象的三维坐标。在双目视觉中,分左右相机,同时可以获得左视图和右视图,根据匹配的同名点和左右相机的投影矩阵,就可以计算出匹配同名点的世界坐标。如图: O1和O2相机的投影的像素点为p, p’;P为世界坐标点的齐次坐标。首先对两个相机进行标定,并获得投影矩阵分别是T1 和 T2, T1和T2的大小为3x4的矩阵。p=[uv1]p′=[u′v′1] p = \left[\begin{mat

2020-12-14 15:56:20 4702 3

原创 相机标定(张正友标定算法)解读与实战三

相机标定系列相机标定(张正友标定算法)解读与实战一相机标定(张正友标定算法)解读与实战二前两篇文章偏重理论,介绍了针孔相机模型、镜头畸变模型和张氏标定的原理。今天主要讲解代码实现,虽然很多成熟视觉框架已经包含了相机标定,opencv 、matlab、halcon、ros, 为了更深入的结合原理,还是有必要自己码一遍。这里数据采用OpenCV data 中提供的left 和right标定版图像,我这里用left的,共有13张,棋盘格BorderSize是 9x6,单元格大小SquareSize是

2020-12-12 15:18:39 2093 2

原创 相机标定(张正友标定算法)解读与实战二

上一篇介绍了相机模型和畸变模型,有了这个基础就可以对相机标定进行讲解了。张正友标定法,其实就是拍摄10几张不同姿态的棋盘格,就可以估算出相机的内参和棋盘格的姿态。利用了针孔相机模型和棋盘格三维平面的世界坐标与棋盘格图像的坐标之间的透视关系(单应性)进行计算的。具体推导过程:有2D点m 和 3D点Mm=[uv]M=[XYZ] m = \left[\begin{matrix} u \\ v \end{matrix}\right] M= \left[\begin{matrix} X \\ Y \\ Z

2020-12-10 17:45:15 956 2

原创 相机标定(张正友标定算法)解读与实战一

解读张正友标定算法,论文

2020-12-08 12:36:00 1050 1

原创 常用排序算法C++

冒泡排序冒泡排序是比较简单的O(n2)级别的排序算法,思路是挨个比较邻近的数值,然后交换位置,就像在水里的泡泡一样,总能把最大的或者最小的交换到最上层。/** * 冒泡排序 */template<typename T>void bubble_sort(T arr[], int length){ for (int i=0; i< length-1; i++)...

2020-03-12 12:59:02 129

原创 BundleFusion编译与使用

最近淘宝了一个二手的Kinect v1, 没有涉足过RGB-D深度相机,感觉挺好玩的,BundleFusion算法可以实现三维的实时重建。那么就开始安装。源码是基于Window平台下的.我的安装环境Windows 10CUDA 8VS 2013DirectX SDK June 2010我首先准备好了用到的所有软件一个一个来解决:安装CUDA8.0操作系统就不用多讲了。我电...

2020-03-07 18:12:47 2866 9

原创 链表之队列

队列也属于链表的一种,他的特点是先入先出也就是说在对位插入节点,在对头移除节点template<typename T>struct Node{public: Node(T value, Node<T> *next): value(value), next(next){} Node(T value): value(value){} N...

2020-03-07 17:15:07 119

原创 链表之单链表

链表属于顺序结构,是最简单的一种,主要包括,链表是插入、删除、查询等这里以指针的形式,并结合模板类方法定义节点template<typename T>struct Node{public: Node(T value, Node<T> *next): value(value), next(next){} Node(T value): val...

2020-03-07 17:14:44 103

原创 C++之ZeroMQ的使用

zeromq官网的使用教程很详细,这里主要介绍两种常使用的模式。Request/Reply (请求应答模式)这种模式和网络API请求一样,先向一地址的发送请求,然后等待服务器返回对应的数据或者状态,服务器在后端一直监听发过来的请求,然后返回对应的数据即可。这里代码都是cppzmq的封装的。void sendMsg(){ int port=5555; std::cout &...

2020-03-07 16:52:30 6912

原创 C++ 之ZeroMQ编译

ZeroMQ编译项目需求当有两个项目或者多个项目的实时需要进行信息的交换,根据项目的要求有实时的和非实时的。常用的是基于消息队列的机制,特别是网站的项目。但一般都会把消息框架搭建在公共的服务器上,作为一个中间层,我们这里需要的是不需要服务器也能也交换信息,那就可以基于socket进行通信,但是socket底层写起来难以维护和管理,特别是涉及到多进程机制。这里有个基于C编写的ZeroMQ,根据官...

2020-03-02 12:43:27 3653 1

原创 ROS创建 Workspace

在ROS下编译自己的代码需要创建ROS工作空间,然后在空间内创建ROS的开发包。创建工作空间 catkin_wsatway@atway-pc:~$ mkdir -p ~/catkin_ws/srcatway@atway-pc:~$ cd ~/catkin_ws/# 在工作空间下运行 catkin_makeatway@atway-pc:~/catkin_ws$ catkin_make...

2019-11-11 17:48:55 195

原创 cuda编程入门-HelloWorld

为了提高并行运算速度,开始接触cuda编程,cuda 在安装的时候提供了很多示例,一般位于Home目录下,可以作为学习的参考,同时官网提供的入门教程,就是很好的学习资料。cuda编程首先要转换与cpu 下编程的思想,在cpu 下,我们一般都是按照顺序进行执行,或者开几个线程处理几个任务,而在gpu 下,是分block 和 thread的,gpu由多个block(x,y ,z )组成,每个bloc...

2019-11-11 17:11:10 944

原创 Ubuntu18.04安装ROS Melodic

网上有很多安装ROS的步骤,我这里简单记录自己安装的过程,已经遇到的问题。设置软件源在更新里设置成国内的软件源,我这里设置为清华的。配置ROS安装资源```bashsudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/...

2019-11-11 10:36:00 145

原创 Centos7.6之安装MongoDB安装

这里为了方便使用yum库进行安装,系统本身的服务器是阿里云服务器,yum源已经设置为了阿里云安装命令:yum -y install mongodb-org查看Mongdb 的安装路径和配置路径[root@iZm5e400nzm6ck0cz0u32aZ ~]# whereis mongodmongod: /usr/bin/mongod /etc/mongod.conf /usr/sha...

2019-10-19 12:01:41 917

原创 git常用基本命令

git add . // 添加所有文件git commit -m “注释” // 添加注释git push origin master // 推到主分支上git status // 查看状态git tag // 查看taggit tag v1.0 -m “v1.0版本” // 在当前分支上创建 taggit push origin v1.0 // 推送到github 上gi...

2019-10-16 17:40:20 95 1

原创 Centos7.6 之 Rabbitmq 安装

关于消息队列的知识网上有很多讲解的,这里就不再讲解了,由于项目的需要,共多个项目之间进行数据交换等,需要用到消息队列,进行监听。本例使用RabbitMQ。由于服务器是Windows 服务器,下载相应的软件,具体地址: http://www.rabbitmq.com/install-windows.html 安装说明软件下载: 1.Erlang Windows Binary 2.r

2019-10-10 13:42:10 382

原创 Centos7.6 之 Redis安装

利用yum 进行安装[dataman@iZm5e400nzm6ck0cz0u32aZ init.d]$ sudo yum install -y redis安装成功以后,可以通过service 或者systemctl 启动或者关闭[dataman@iZm5e400nzm6ck0cz0u32aZ ~]$ service redis start # 启动[dataman@iZm5e400nzm...

2019-10-10 13:06:26 268

原创 Centos7.6 之 Tomcat9安装

用xshell 远程连接到阿里云的服务器。查看系统版本[dataman@iZm5e400nzm6ck0cz0u32aZ ~]$ cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)JDK1.8 安装我开发环境用的JDK1.8的到官网现在对应的版本https://www.oracle.com/technetwork/j...

2019-10-10 11:41:45 428

原创 Mat像素点位置的读取和设置方式

常用的有三种方式对Mat像素进行操作1.数据指针快模式2. 行指针模式3.按坐标模式总结1.数据指针快模式这中方式需要用到Mat的 step 数据,step 表示每行数据所占的步长;现在以一个统一的例子,给图像的中心块赋予红色。string filename = "F:/data/lena.jpg";Mat img = imread(filename);//方法1; 指针模式 ste...

2019-07-04 16:50:48 3898

原创 Windows下安装anaconda3

最近在学习如何开发Python,目前Python有两个版本2.7和3.6版本。本文主要安装3.6版本。Python易学,但用起来不容易,特别是对海量的包管理,为了更好的管理Python第三方开发包。本文用Anaconda。什么是Anaconda,官网解释:Anaconda is the world’s most popular Python data science platform. A...

2018-09-07 15:47:20 13159

原创 OpenCV基础之几何变换

OpenCV基础之集合变换图像几个变换一般包括:旋转、平移、缩放、仿射变换和透视变换。旋转围绕图像的某个点进行给定角度的旋转变换,旋转矩阵的表现形式: OpenCV提供了根据旋转中心和角度生成旋转矩阵的方法:cv2.getRotationMatrix2D 但是该方法获得旋转矩阵与上述略有不同形式: rows,cols,channels= img.shape...

2018-09-07 15:47:01 377

原创 vs 2015 编译 CloudCompare源码

CloudCompare 是一个免费开源的点云库比较平台,可以支持跨平台。最近主要用到其中的多组点云数据的比较,需要对其源码进行编译。 github 上有其最新的源码可以下载:https://github.com/cloudcompare/cloudcompare。编译CloudCompare需要经过一些几个步骤:下载源代码。安装qt5.6.3 并集成到VS 2015 我这里编译选择VS 2

2017-10-10 17:54:16 2557

原创 Vs2015下配置OpenCV3.3环境

这里记录一下Vs 2015下配置OpenCV3.3的开发环境。 首先去OpenCV官网下载最新版本的3.x系列,然后解压。 我在这里解压到 C:\opencv-3.3.0-vc14 OpenCV3.3 中只有x64位编译的版本,因而我主要配置成x64的环境。1. 用Vs 2015 新建一个C++ 控制台程序命名为:OpenCV3Learning并把编译环境改成64位2.配置OpenCV类库为

2017-09-14 16:56:57 543

原创 MySQL的master上增加Slave(2)

基于上篇文章,在master上继续挂载一个slave2到master上,可以有两钟方式,一个是直接挂载到master上,二是先从slave1获得数据库备份和master的日志文件和节点,然后再配置salve2到master近关联。正常情况下,master一直在运行,为了不影响master的业务运行,我这里选择方法二。1.首先准备slave2服务器,主机名改为slave2,IP 为 192.16

2017-05-04 12:18:21 677

原创 MySQL Replication 的基本知识及简单配置(1)

MySQL的复制功能是MySQL高级功能之一,任何使用MySQL的企业一般都会用到该功能,复制功能有什么作用呢,假如你只有一台MySQL服务器,那么当你的这台服务器突然因为某种原因宕机了,你的业务就会停止。这不是我们想遇到的情况,因而复制功能就会帮我们尽可能的避免这样种情形,当然还有很多其他的用处。 1.作为热备份(hot standby) 如果一开始就设置成master-slave 模

2017-05-03 15:02:19 311

原创 Centos6.8下安装MySQL5.7.17

查看Centos版本[root@slaver2 ~]# cat /etc/redhat-release CentOS release 6.8 (Final)查看系统中是否已安装mysql,如果安装就卸载##查看是否安装[root@slaver2 ~]# rpm -qa | grep mysqlmysql-libs-5.1.73-8.el6_8.x86_64##如果安装进行卸载[root@sl

2017-05-03 13:52:52 366

原创 Anyty C++DLL封装成NetDLL进行调用

Anyty C++DLL封装成NetDLL进行调用由于项目中要用到摄像头进行画面的抓拍,提供的C++动态链接库dll.但项目使用C#进行开发的,需要进行二次封装。主要涉及到两点: 1.C++中常用的变量在C#中的映射 2.C++方法在C#中的调用 3.C++回调函数在C#中的调用1.C++中常用的变量在C#中的映射我主要整理了自己用到的一些变量之间的映射关系。

2017-05-03 13:09:08 413

原创 c语言问题

 本人初学c语言对这道题有些不明白,请好心人指教。谢谢题目:找到年龄最大的人,并输出。请找出程序中有什么问题。1.程序分析:2.程序源代码:#define N 4#i nclude "stdio.h"static struct man{ char name[20];int age;} person[N]={"li",18,"wang",19,"zhang",20

2009-04-26 20:41:00 287

空空如也

空空如也

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

TA关注的人

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