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

本文分享了在使用C++进行图像拼接时遇到的问题及解决方案。初版代码因忽略了图片高度差异,导致拼接失败,仅显示一张图片。通过调整代码,根据不同图片的实际尺寸动态设定矩阵,成功实现了多图拼接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的步骤:

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

 

拼接效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值