OpenCV编程->求点集映射关系实现

来源:互联网 发布:数码绘画软件 编辑:程序博客网 时间:2024/06/05 15:31


///////////////////////////////////////////////////////////////////////////////////////////*对映射矩阵进行变换,得到两个映射矩阵的一一对应的点阵,然后计算对应关系*/////////////////////////////////////////////////////////////////////////////////////////////左相机映射矩阵Mat mapping1 = rmap[0][0]; Mat mapping2 = rmap[0][1];//右相机映射矩阵Mat mapping3 = rmap[1][0];Mat mapping4 = rmap[1][1];//对右相机映射矩阵平移,得到新的右相机映射矩阵Mat mapping5,mapping6;cv::Size mapping_size = rmap[0][0].size();cv::warpAffine(mapping3, mapping5, t_mat, mapping_size);cv::warpAffine(mapping4, mapping6, t_mat, mapping_size);//建立两个平面对应的点集群std::vector<cv::Point2f> mapL, mapR;Point2f lp, rp;//范围限定for (int i = 200; i <800; i++){for (int j = 200; j < 800; j++){lp.x = mapping1.at<float>(i, j);lp.y = mapping2.at<float>(i, j);rp.x = mapping5.at<float>(i, j);rp.y = mapping6.at<float>(i, j);mapL.push_back(lp);mapR.push_back(rp);}}//这里使用findHomography函数,这个函数的返回值才是真正的变换矩阵  Mat m_homographymap;vector<uchar> mmap;//在两个平面之间寻找单映射变换矩阵  R*m_homography=Lm_homographymap = findHomography(mapR, mapL, CV_RANSAC, 3, mmap);//定义平移矩阵  cv::Mat t_map = cv::Mat::zeros(2, 3, CV_32FC1);cv::Size img_size = img1.size();//测试通过t_map.at<float>(0, 0) = m_homographymap.at<double>(0, 0);;t_map.at<float>(0, 1) = m_homographymap.at<double>(0, 1);;t_map.at<float>(0, 2) = m_homographymap.at<double>(0, 2); //水平平移量t_map.at<float>(1, 0) = m_homographymap.at<double>(1, 0);t_map.at<float>(1, 1) = m_homographymap.at<double>(1, 1);t_map.at<float>(1, 2) = m_homographymap.at<double>(1, 2); //竖直平移量Mat Img1;//根据平移矩阵对右图像进行仿射变换  img31为仿射变换后的标准图像  cv::warpAffine(img2, Img1, t_map, img_size);


阅读全文
0 0
原创粉丝点击