代码来和数据集来自于“小白公众号”
链接:https://pan.baidu.com/s/1bYrj57MEdhwWp45XXVbdpA 提取码:b3m6
双目相机标定的过程:
1.,调节两个相机的角度,给标定板拍10组左右的照片。
2,通过张正友的思想得到两个相机的内外参矩阵和畸变矩阵,为两个相机的畸变矫正做准备。
3,现实情况中,我们无法完全控制两个相机是完全平行的拍一个物体,所以只能通过矫正,来构造平行这一条件,然后通过两个相机的一些参数计算出深度z。
4,通过计算图片中物体的每一个点距离相机镜头的深度,从而构建出该物体的三维立体图。
总而言之,双目相机可以照到一个物体的更多细节,然后根据该细节在不同角度的照片中的位置,得到该细节的空间坐标信息,最终还原照片中的物体在三维空间中的图像。
缺点:双目相机只能对两个镜头都拍摄到的物体细节提取空间信息,也就是说对两个相机拍摄的物体细节无交集的那部分,会产生3D空间还原误差。
思考:如果是更加多维的相机,是不是还原的效果更好呢?
目前只知道,多目相机可以使还原的速度更快
双目相机的应用:
1,根据视差测距离
2,3d构建
代码:
以下是双目相机的标定代码,以及将两个相机的畸变矫正代码。
下一步计划:利用双目相机拍一个实际物体,利用双目参数进行三维立体的投影。
#include <opencv2\opencv.hpp>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
using namespace cv;
void getImgsPoints(vector<Mat> imgs, vector<vector<Point2f>>& imgsPoints, Size board_size)
{
for (int i = 0; i < imgs.size(); i++)
{
Mat img1 = imgs[i];
Mat gray1;
cvtColor(img1, gray1, COLOR_BGR2GRAY);
vector<Point2f> img1_points;
findChessboardCorners(gray1, board_size, img1_points); //计算方格标定板角点
find4QuadCornerSubpix(gray1, img1_points, Size(5, 5)); //细化方格标定板角点坐标
imgsPoints.push_back(img1_points);
}
}
int