相机标定: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. mysql 堆注入写shell

    如果一个平台有注入点的时候可以通过写一句话拿shell 条件 1.myql 5.6.34 版本区分 2.有写的权限 3.知道绝对路径 MySQL 中 在在mysql 5.6.34版本以后 secure ...

  2. Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2

    前后端分离后,维护接口文档基本上是必不可少的工作. 一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了.当然这是一种非常理想的状态,实际开发中却 ...

  3. Qualcomm-Atheros-QCA9377-Wifi-Linux驱动

    资源来自:https://download.csdn.net/download/ichdy/10331646 已经下载好了,发现无法使用,本人系统Centos7.2,如果有安装成功,并且可以正常使用的 ...

  4. qt读取文本

    直接 代码: // lyy : 2016/8/26 16:40:11 说明:读取文本 bool FileOpeartion:: GetTheTextContent (const QString str ...

  5. MySQL GROUP_CONCAT()函数 -- 字段合并查询

    在做查询的时候遇到一个问题,今天分享一下解决方法. 先看一下我想要什么效果. 清单名称类型要点,后面两列为清单步骤(外键表) 但我并不想让主表的内容重复那么多遍,于是 distinct去重.子查询.左 ...

  6. tp5底层源码分析之------tp5.1类的自动加载机制

    tp框架作为国内主流框架,目前已经发布了6.0版本,相当于3.*版本是进行了重构,今天我们从源码的角度来研究下tp5.1自动加载的实现 作为单入口框架,从入口文件看起,入口文件在public/下,那么 ...

  7. Java基础(四)注释

    1.类注释 类注释必须放在import语句之后,类定义之前.eclipse中使用Shift + Alt + J快捷键添加类注释. 2.方法注释 每一个方法注释必须放在所描述的方法之前.除了通用标记之外 ...

  8. vue表单属性

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

  9. Flask解析(二):Flask-Sqlalchemy与多线程、多进程

    Sqlalchemy flask-sqlalchemy的session是线程安全的,但在多进程环境下,要确保派生子进程时,父进程不存在任何的数据库连接,可以通过调用db.get_engine(app= ...

  10. int和string的相互装换 (c++)

    int和string的相互装换 (c++) int转换为string 第一种方法 to_string函数,这是c++11新增的函数 string to_string (int val); string ...