OpenCV实现任意大小图片的合并--可能的坑

常见的步骤:

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);//图形高度不同,矩阵大小不同,拼不上去的。
			

 

拼接效果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值