投影矩阵的使用(续)

接前面

控制台显示


用 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 应该都可以打开



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值