opencv之常用还是忘,那咋办嘛

相机标定: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 ..

原文地址:https://www.cnblogs.com/xingkongcanghai/p/11746595.html