求问基于双目重建的代码解析
肖蜗牛 2017-04-25 08:59:46 下载网址:http://download.csdn.net/detail/aichipmunk/9073499
blog:http://blog.csdn.net/qq_26499769/article/details/51817254#comments
在上面这个网址下载了基于opencv3.0的双目重建代码。自己用的opencv3.1重配置了下。
主函数:
void main()
{
string img1 = "0004.png";
string img2 = "0006.png";
vector<string> img_names = { img1, img2 };
vector<vector<KeyPoint>> key_points_for_all;
vector<Mat> descriptor_for_all;
vector<vector<Vec3b>> colors_for_all;
vector<DMatch> matches;
//本征矩阵
Mat K(Matx33d(
2759.48, 0, 1520.69,
0, 2764.16, 1006.81,
0, 0, 1));
//提取特征
extract_features(img_names, key_points_for_all, descriptor_for_all, colors_for_all);
//特征匹配
match_features(descriptor_for_all[0], descriptor_for_all[1], matches);
//计算变换矩阵
vector<Point2f> p1, p2;
vector<Vec3b> c1, c2;
Mat R, T; //旋转矩阵和平移向量
Mat mask; //mask中大于零的点代表匹配点,等于零代表失配点
get_matched_points(key_points_for_all[0], key_points_for_all[1], matches, p1, p2);
get_matched_colors(colors_for_all[0], colors_for_all[1], matches, c1, c2);
find_transform(K, p1, p2, R, T, mask);
//三维重建
Mat structure; //4行N列的矩阵,每一列代表空间中的一个点(齐次坐标)
maskout_points(p1, mask);
maskout_points(p2, mask);
reconstruct(K, R, T, p1, p2, structure);
//保存并显示
vector<Mat> rotations = { Mat::eye(3, 3, CV_64FC1), R };
vector<Mat> motions = { Mat::zeros(3, 1, CV_64FC1), T };
maskout_colors(c1, mask);
save_structure(".\\Viewer\\structure.yml", rotations, motions, structure, c1);
system(".\\Viewer\\SfMViewer.exe");
}
我做出来结果是在viewer文件夹生成了\structure.yml文件。代码主人说打开viewer下的SfMViewer.exe就可以显示出structure。然后我很好奇这个SfMViewer.exe怎么写出来的??viewer文件夹里还包含了很多opencv的dll。有大神知道怎么写出来的吗??