相关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指的是以哪块图像块为中心,形成大块。程序的思路就是先水平拼接,再纵向拼接。拼接效果如下图:
拼接后: