OpenCV 一张图显示多张图像

/*
@brif
显示多个 Mat 图像,显示顺序为 matArray 的输入顺序	
输入的图像大小会被重塑为 200 * 200,有需要的可以自行删改
num row col 需要输入正确的对应数量,这里只是做了简单的检查。不正确输入可能会出现未知的bug
没有添加图像标题的显示,有兴趣的话可以自己做一下
@parms
matArray[]		Mat图像数组
num				图像数量
row				图像行数
col				图像列数
type			图像类型
@example
显示一个两行两列的图像
imageShow(matArray, 4, 2, 2);
*/
void imageShow(Mat matArray[], int num, int row = 1, int col = 1, int type = CV_8UC1)
{
	if (num > row * col)
	{
		cout << "num > row * col" << endl;
		return;
	}
	int whiteVCols = 20;	//图像间隔像素数量
	int whiteHRows = 20;	
	int imgCols = 200;		//显示的每张图像大小
	int imgRows = 200;
	Mat imgResize;
	//设置图像间隔空白大小
	int totalCols = imgCols * col + whiteVCols * (col + 1);
	int totalRows = imgRows * row + whiteHRows * (row + 1);
	//背景图像大小, 这里如果三通道的话需要改成 Scalar(255, 255, 255)
	//不过我做的都是灰度图,就没处理,有需要的话可以自己改一下
	Mat resultMat(totalRows, totalCols, type, Scalar(255));
	int colAdd, rowAdd;
	for(int i = 0;i < col;i++)
	{
		rowAdd = whiteHrows(j + 1) + j * imgRows;
		for(int j = 0;j < row;j++)
		{
			colAdd = whiteVCols(i + 1) + i * imgCols;
			//获取背景图像中替换为显示图像的区域
			Mat mat(resultMat, Range(rowAdd, rowAdd + imgRows), Range(colAdd, colAdd + imgCols));
			if((i + 1) * j < num - 1)
			{//这里是为了控制显示的数量小于最大值
				resize(matArray[(i - 1) * col + j - 1], imgResize, Size(imgCols, imgRows));
				imgResize.copyTo(mat);
				num--;
				if(!num) break;
			}
		}
		if(!num) break;
	}
	nameWindow("TotalMat", WINDOW_NORMAL);
	imshow("TotalMat", resultMat);
}


没有用编译器,纯手打,有问题的话稍微改一下应该就没事了。也可以留言。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值