常见的步骤:
https://blog.csdn.net/ktigerhero3/article/details/53105372
其中我这次拼接的多个图片,高度是不同的,最开始代码如下:注意其中Rect设置的时候,高度都用了一样的 yValue ,导致拼接不同的图片时矩阵不同,但是C++也不报错,就是拼接失败,现象就是只有一个图能拼接上去,因为只有其中一个图的高度是和矩阵相同的。
//图像合并
int xValue = 0;
for (int x_i = 0; x_i < xsize.size(); x_i++)
{
xValue = xValue + xsize[x_i];
xValue = xValue + 30;
}
xValue = xValue - 30;
int yValue = 0;
for (int y_i = 0; y_i < ysize.size(); y_i++)
{
if (ysize[y_i] > yValue)
{
yValue = ysize[y_i];
}
}
Size bigsize(xValue, yValue);//合并后图片size
Mat result;
result.create(bigsize, CV_MAKETYPE(mats[0].depth(), 3));//rgb 3通道
result = Scalar::all(255);
vector<Mat>temp(20);
int xStart = 0;
for (int mat_i = 0; mat_i < mats.size(); mat_i++)
{
temp[mat_i] = result(Rect(xStart, 0, xsize[mat_i], yValue);//图形高度不同,矩阵大小不同,拼不上去的。
mats[mat_i].copyTo(temp[mat_i]); //copy图片到对应位置
xStart += xsize[mat_i] + 30;
string imageName_r = path_roi + "/" + "拼接后的" + std::to_string(mat_i) + " ---" + pic_name;
imwrite(imageName_r, result);
}
错误结果:
解决办法:
拼每个图片,用每个图片的尺寸指定矩阵,修改为:
temp[mat_i] = result(Rect(xStart, 0, xsize[mat_i], ysize[mat_i]));//左上角坐标+矩形的XY
//temp[mat_i] = result(Rect(xStart, 0, xsize[mat_i], yValue);//图形高度不同,矩阵大小不同,拼不上去的。
拼接效果: