求问基于双目重建的代码解析

肖蜗牛 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。有大神知道怎么写出来的吗??
...全文
382 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43445817 2019-05-08
  • 打赏
  • 举报
回复
你好,想问下本征矩阵k的参数是怎么确定的
F_L_Y_ing 2018-07-30
  • 打赏
  • 举报
回复
hi,我用了同样的代码,但是在生成viewer目录有问题。首先我的文件存储目录是在C盘下,无法直接写文件。其次,我在D盘下按上述代码生成viewer目录下的yml同样出错,但是去掉viewer直接生成yml是可以的。但是也就无法找到sfm viewer. exe。所以我想请问您是怎么做的,是不是环境还是有问题。我用的是OpenCV3.2,链接了OpenCV contrib库。谢谢您了
F_L_Y_ing 2018-07-30
  • 打赏
  • 举报
回复
hi,我用了同样的代码,但是在生成viewer目录有问题。首先我的文件存储目录是在C盘下,无法直接写文件。其次,我在D盘下按上述代码生成viewer目录下的yml同样出错,但是去掉viewer直接生成yml是可以的。但是也就无法找到sfm viewer. exe。所以我想请问您是怎么做的,是不是环境还是有问题。我用的是OpenCV3.2,链接了OpenCV contrib库。谢谢您了
shengdewu 2018-01-15
  • 打赏
  • 举报
回复
抱歉,我不是专业的,我只是做双摄,通过一些简单的例子,了解三角测量而已, 本专业是C++,抱歉。

4,246

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧