投影矩阵的使用(续)

来源:互联网 发布:英语对话视频软件 编辑:程序博客网 时间:2024/06/03 17:09

接前面

控制台显示


用 meshlab 来把重建的点文件和pmvs的点文件比较一下


旋转一下


并没有远离,

假如用下面这个匹配图直接重建会怎么样呢?



这就相差很远了

还有一些函数

//读取一个投影矩阵void read1Project(string name,Mat &project){ifstream in;     //文件读操作,存储设备读区到内存中  in.open(name.data());   //将文件流对象与文件连接起来     assert(in.is_open());   //若失败,则输出错误消息,并终止程序运行 string s;    getline(in,s);float m1,m2,m3,m4;for(int i=0;i<project.rows;i++){int j=0;in >> m1   >> m2   >> m3   >> m4  ;project.at<float>(i,j++)=m1;project.at<float>(i,j++)=m2;project.at<float>(i,j++)=m3;project.at<float>(i,j)=m4;}in.close();             //关闭文件输入流 }//读取两个投影矩阵void readProject(string name1,string name2,Mat &project1,Mat &project2){read1Project(name1,project1);std::cout << project1 << '\n';read1Project(name2,project2);std::cout << project2 << '\n';}

void Gms_Match(Mat &img1, Mat &img2,vector<KeyPoint> &kp1,vector<KeyPoint> &kp2,vector<DMatch> &matches_all){// GMS 过滤器int num_inliers = 0;std::vector<bool> vbInliers;cout << "正在精细挑选匹配:gms " << endl;gms_matcher gms(kp1,img1.size(), kp2,img2.size(), matches_all);num_inliers = gms.GetInlierMask(vbInliers, false, false);cout << "挑选后还有 " << num_inliers << " 个匹配点." << endl;vector<DMatch> matches_hao;for (size_t i = 0; i < vbInliers.size(); ++i){if (vbInliers[i] == true){matches_hao.push_back(matches_all[i]);}}matches_all.swap(matches_hao);  }

上面的函数来自网络的各个地方,我就拿了一把剪刀和一罐浆糊,把它们粘在一处。

完整的程序 和资源(图片,投影txt,out等)-->http://download.csdn.net/download/juebai123/10164943

用vs2008 + opencv3.0 编译,高版本vs 应该都可以打开