相机标定:https://blog.csdn.net/y2c58s43d69g8h7G_g/article/details/97239418

畸变参数个数要是镜头太凸的话,就像鱼眼相机和哨兵150视角,就选3

FocalLength 焦距

PrincipalPoint 主点

RadialDistortion 径向畸变

TangentialDistortion 切向畸变

转xml代码:https://www.cnblogs.com/xingkongcanghai/p/11862534.html

writeXML(cameraParams,'cameraParams.xml');

Ubuntu自启动程序 gnome-session-properties

Rect tl()左上角点坐标 br()右下角点坐标

//切割ROI
Mat ROI = threshold_output(Rect(boundRect[i].tl(), boundRect[i].br()));

逼近多边形:approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);

返回外部矩形边界:boundRect[i] = boundingRect(Mat(contours[i]));//参数为输入的二维点集可以是vector或Mat类型

寻找最小包围矩形:RotatedRect minRect = minAreaRect(Mat(contours[i]));参数为输入的二维点集可以是vector或Mat类型

Point2f vertex[4];//用于存放最小矩形的四个顶点

minRect.points(vertex);//返回矩形的四个顶点给vertex

//绘制最小面积包围矩形

vectormin_rectangle;

for (int i = 0; i < 4; i++)

{

line(drawing, vertex[i], vertex[(i + 1) % 4], Scalar(255, 0, 0), 1, 8);//非常巧妙的表达式

min_rectangle.push_back(vertex[i]);//将最小矩形的四个顶点以Point的形式放置在vector容器中

}

最小包围圆:minEnclosingCircle(contours[i], center, radius);//寻找最小包围圆

circle(drawing, center, cvRound(radius), Scalar(0, 255, 0), 1, 8);//绘制最小包围圆,cvRound对半径进行四舍五入

	//找轮廓重心
vector<Moments> mu(contours.size());
mu[i] = moments(contours[i], false);
double a = mu[i].m10 / mu[i].m00;
double b = mu[i].m01 / mu[i].m00;
//cout << i << "******" << "(" << a << "," << b << ")" << endl;
Point p = Point(a, b);
circle(drawing, p, 1, Scalar(0, 0, 255), 3, 8);//重心

寻找轮廓:

findContours(threshold_output, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(0, 0));//RETR_EXTERNAL最外层

findContours(ROI, contoursROI, hierarchyROI, CV_RETR_TREE, CHAIN_APPROX_SIMPLE);//CV_RETR_TREE,所有

画轮廓:drawContours(drawingROI, contoursROI, j, Scalar(0, 0, 255), 2);//contoursROI到drawingROI

Atan2 函数介绍 atan2

原型:extern float atan2(float y, float x);

用法:#include <math.h>

功能:求y/x(弧度表示)的反正切值.

在 istream 和 ifstream 类中有一个read成员函数,它可以用来读取使用 write 写入的二进制数据。它釆用了两个形参,一个是字节读取后将要存储的缓冲区的地址,另外一个是要读取的字节数:

read(addressOfBuffer, numberOfBytes)

输出错误cerr https://www.baidu.com/link?url=677fHjVKdf4C_SZ8IZzf5pFJDmFHr6ZCyn8VqDUta6dZCn3gbQm1E-Fi0UFO0BVAAzMxNsfxIw8JOJma1CrkUD1H5ucJ6fWIMUbkbpuEAbG&wd=&eqid=947da5540009e9ce000000025dfb565d

基于PNP方法的绝对位姿测量

https://www.jianshu.com/p/b97406d8833c

void solvePnP(InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags = CV_ITERATIVE)

objectPoints - 世界坐标系下的控制点的坐标,vector的数据类型在这里可以使用

imagePoints - 在图像坐标系下对应的控制点的坐标。vector在这里可以使用

cameraMatrix - 相机的内参矩阵

distCoeffs - 相机的畸变系数

以上两个参数通过相机标定可以得到。相机的内参数的标定参见:http://www.cnblogs.com/star91/p/6012425.html

rvec - 输出的旋转向量。使坐标点从世界坐标系旋转到相机坐标系

tvec - 输出的平移向量。使坐标点从世界坐标系平移到相机坐标系

flags - 默认使用CV_ITERATIV迭代法

openCV中convertTo(转换)的用法:https://blog.csdn.net/haima1998/article/details/82079042

cmake -DCMAKE_BUILD_TYPE=Release ..

opencv之常用还是忘,那咋办嘛的更多相关文章

  1. 5. openCV中常用函数学习

    一.前言 经过两个星期的努力,一边学习,一边写代码,初步完成了毕业论文系统的界面和一些基本功能,主要包括:1 数据的读写和显示,及相关的基本操作(放大.缩小和移动):2 样本数据的选择:3 数据归一化 ...

  2. Opencv 初探 常用API

    一.介绍 OpenCV是计算机视觉领域应用最广泛的开源工具包,基于C/C++,支持Linux/Windows/MacOS/Android/iOS,并提供了Python,Matlab和Java等语言的接 ...

  3. python进阶—OpenCV之常用图像操作函数说明(转)

    文章目录cv2.thresholdcv2.bitwise_andcv2.bitwise_orcv2.bitwise_notcv2.inRangecv2.resizecv2.adaptiveThresh ...

  4. 2.opencv图像处理常用操作

    图像的平滑处理 平滑,也称 模糊, 平滑处理时需要用到一个滤波器 .滤波器想象成一个包含加权系数的窗口,这个加权系数也叫做核或者模版. // 图像平滑处理分而学之.cpp : 定义控制台应用程序的入口 ...

  5. sass:常用备忘

    一.变量 所有变量以$开头 $font_size: 12px; .container{ font-size: $font_size; } 如果变量嵌套在字符串中,需要写在#{}中 $side : le ...

  6. office 软件常用备忘(删除线/冻结等)

    Word: 1 大纲显示/navigation display: 视图/View --> Navigation Pane (left) 2 Track changes: 显示删除线 / 修改地方 ...

  7. (一)S5PV210开发板常用易忘操作记录

    一.调试串口 2.SD卡槽 (三)启动方式选择 蜂鸣器下面的白色2针插座(图中红色线圈出来的那个)为选择USB/SD卡启动的开关.默认情况下为SD卡启动,如果需要USB启动则使用短路帽(若没有短路帽, ...

  8. 自己常用易忘的CSS样式

    鼠标小手:   cursor:pointer 点击边框消失:outline:none; ul li下划线以及点消失: list-style-type:none; span 超出内容为...:overf ...

  9. OpenCV中 常用 函数 的作用

    1.CV_Assert函数作用: CV_Assert()若括号中的表达式值为false,则返回一个错误信息.

随机推荐

  1. 19.Linux进程管理概述

    1.进程基本概述 当我们运行一个程序,那么我们将运行的程序叫进程. PS1: 当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限. PS2: 在进程运行的过程中,服务器上会有各种状态 ...

  2. Vue学习系列(三)——基本指令

    前言 在上一篇中,我们已经对组件有了更加进一步的认识,从组件的创建构造器到组件的组成,进而到组件的使用,.从组件的基本使用.组件属性,以及自定义事件实现父子通讯和巧妙运用插槽slot分发内容,进一步的 ...

  3. Easy Poi入门

    最近有一个需求,就是把excel中的内容,解析成Json对象格式的文件输出. 然后就上网找了一波资料,大神们都说用POI来做.但是我看了一下POI的解析过程,但是为了秉着高效的原则,花最少的时间去实现 ...

  4. 5.分析snkrs的Android的DeviceID生产规则

    分析Android的DeviceID生产 前面已经把web端的分析了一些,要想实现其实容易也难,容易是规则很容易,难是时间生成控制很难,我之前大概花了一周时间分析和梳理,然后行为测试,之前我已经讲过c ...

  5. video2

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 聊一聊Java中的各种运算符

    计算机之所以叫“计算机”,其最基本用途之一就是运算,对应刚刚接触Java的小伙伴而言,熟悉并掌握Java中的各种运算符及其在表达式中的运算优先级是十分必要的. 算术运算 算术运算主要用来处理数学中的加 ...

  7. 汇编语言——物理地址=段地址x16+偏移地址,检测点2.2

    一.为什么 物理地址=段地址x16+偏移地址? 刚开始学时,我都笨到不明白为什么是2的N次方,咱把物理地址就当数字,计算机中数字是由很多位0或1自由组合的, 而每一位上要么是0要么是1,只有这两种情况 ...

  8. MUI错误信息:系统已经存在较高版本,些安装包无法安装。

    MUI 混合开发APP 版本更新问题. 错误信息: 解决方法: manifest.json->version->code 这个值需要累加,version->name 是用于显示的,这 ...

  9. 从零开始用刚买的阿里云实例搭建lnmp环境(非集成包)

    一.安装前 1. 更新系统软件: yum update 2. 查看是否已安装wget: rpm -qa wget 否则安装: yum install wget 3. 查看是否已安装编译器: rpm - ...

  10. Java 方法重载 (Overload)

    对重载 (Overload) 的认识 为什么要用方法重载: 对于功能类似的方法来说,因为参数列表不一样,如果定义不同名称的方法,太麻烦且难以记忆. 为了解决这个问题,引入方法的重载. 重载的定义: 多 ...