其实方法很简单。
Mat之间的赋值,如果不用clone或copyto的话,只是赋值指针。
所以,让某个Mat等于另外一个Mat的一部分的话。就可以对另一个Mat的一部分进行操作。
所以简单来讲。
创建一个Mat a
让a等于某一部分。
创建一个和合成后大小相同的Mat c
创建一个Mat b
让b指向Mat c的某一部分
让a copyto b
那么a的内容就复制到了c的该部分。
只要反复让a和b分别取值就可以完成了。
奉上代码
Mat m1;
Mat part;
Mat temp(size(x*n,y))
for (int i=0;i<n;i++)
{
m1=imread(file,0);
m2=temp(Rect(i*x,0,x,y));
m1.copyto(m2)
}
return temp
除此之外,如果需要合并的图像大小和通道数不一致。可以采用如下方法。
如果是通道不一致。
可以将通道少的转换为通道多的。
比如 Mat x;
cvtcolor(m1,x,CV_GRAY2BGR);
然后合并就可以了、。
如果大小不一致。
可以将小的resize成大的。使用
resize(m1,x,Size(m2.cols,m2.rows))
如果不希望失真。
可以把空缺的部位补零。
只要让m1等于剩下的那一部分,使用Mat.zeros就可以了。
但是不可以不填充数据,是会报错的。