OpenCV图像处理--常⽤图像拼接⽅法
OpenCV常⽤图像拼接⽅法(⼀) :直接拼接
vconcat()—垂直⽅向拼接,要求待拼接图像有相同的宽度; hconcat()—⽔平⽅向拼接,要求待拼接图像有相同的⾼度。
使⽤vconcat()和hconcat()拼接则要求待拼接图像有相同的宽度或⾼度
Mat img = imread("girl.jpg");
vector<Mat>vImgs;
Mat result;
vImgs.push_back(img);
rectangle函数opencvvImgs.push_back(img);
vconcat(vImgs, result); //垂直⽅向拼接
//hconcat(vImgs, result); //⽔平⽅向拼接
imshow("result",result);
cout <<"Hello World!"<< endl;
waitKey(0);
其他拼接函数
vector<Mat> images;
images.push_back(imread("stitch1.jpg"));
images.push_back(imread("stitch2.jpg"));
// 设置拼接模式与参数
Mat result1, result2, result3;
Stitcher::Mode mode = Stitcher::PANORAMA;
Ptr<Stitcher> stitcher = Stitcher::create(mode);
/
/ 拼接⽅式-多通道融合
auto blender = detail::Blender::createDefault(detail::Blender::MULTI_BAND); stitcher->setBlender(blender);
// 拼接
Stitcher::Status status = stitcher->stitch(images, result1);
// 平⾯曲翘拼接
auto plane_warper = makePtr<cv::PlaneWarper>();
stitcher->setWarper(plane_warper);
status = stitcher->stitch(images, result2);
// 鱼眼拼接
auto fisheye_warper = makePtr<cv::FisheyeWarper>();
stitcher->setWarper(fisheye_warper);
status = stitcher->stitch(images, result3);
// 检查返回
if(status != Stitcher::OK)
{
cout <<"Can't stitch images, error code = "<< int(status)<< endl;
return EXIT_FAILURE;
}
imshow("result1.png", result1);
imshow("result2.png", result2);
imshow("result3.png", result3);
waitKey(0);
图⽰:
OpenCV常⽤图像拼接⽅法(⼆) :基于模板匹配拼接
适⽤范围:图像有重合区域,且待拼接图像之间⽆明显尺度变化和畸变。
优点:简单、快速(相⽐于SIFT特征匹配拼接)。
常⽤实例:两个相邻相机⽔平拍摄图像拼接。
截取如下两部分ROI作为待拼接图像。
待拼接图①:
待拼接图②:
思路:在图①中截取部分公共区域ROI作为模板,利⽤模板在图②中匹配,得到最佳匹配位置后计算X和Y⽅向需要平移的像素距离,将图②对应的拼接到⼤图中。如下,模板为青⾊区域:
部分代码和效果如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论