opencv的多图拼接

相关API

1. hconcat

这个函数可以用平凑

函数原型

void cv::hconcat(InputArray src1, InputArray 	src2,
OutputArray dst )	

void cv::hconcat(const Mat * src, size_t nsrc, outputArray dst )

第一个比较简单,就把src1和src2合并再放到dst 中,重点解释一下第二个版本:
第二版本:

  • src:input array or vector of matrices. all of the matrices must have the same number of rows and the same depth.
  • nsrc:number of matrices in src.
  • dst:output array. It has the same number of rows and depth as the src, and the sum of cols of the src.

人话版本:

第二个:

  • src:一个装着很多矩阵(你要进行拼接的矩阵)的盒子(vector)
  • nsrc :你可以设置要合并这个盒子里面的多少个矩阵
  • dst:合并后完放在dst上面

第一个hconcat 直接放两个矩阵进去合并,第二个hoconcat合并的是容器里的东西,适合多个mat合并的场景。

2.vconcat

这个函数用于垂直方向上合并,函数原型与hconcat基本一致。

例程

该函数实现以某一个图像块为中心,与周围的八领域图像块合并,形成一张大图,相当于把九个图像块合并了起来。

Mat block_neighbour(vector<Mat> a, int index)
{
	vector<Mat>up = { a[index - Block_size - 1], a[index - 1], a[index + Block_size - 1] };   
	vector<Mat>middle = { a[index - Block_size], a[index], a[index + Block_size] };
	vector<Mat>down = { a[index - Block_size + 1], a[index + 1], a[index + Block_size + 1] };

	hconcat(up, a[index - 1]);  // 一个
	hconcat(middle, a[index]);
	hconcat(down, a[index + 1]);

	vconcat(a[index - 1], a[index], a[index]);
	vconcat(a[index], a[index + 1], a[index]);
	return a[index];
}

解释:a是一个vector,里面的每个元素都是一个图像块,index指的是以哪块图像块为中心,形成大块。程序的思路就是先水平拼接,再纵向拼接。拼接效果如下图:
在这里插入图片描述
拼接后:
在这里插入图片描述

发布了16 篇原创文章 · 获赞 4 · 访问量 3905

猜你喜欢

转载自blog.csdn.net/qq_33397016/article/details/90691376