OpenCV 图像合并

    opencv中的cvShowImage函数只能显示单张图像,如果我们需要在一个窗口中显示多张图像,该怎么办?一种解决办法是,我们先将多张图像合并成一张图像,然后调用cvShowImage,达到一个窗口显示多张图像的效果。

    下面是基于opencv实现的水平方向的图像合并,两张图像大小相等,参数一为rgb三通道图像,参数二为单通道图像。

IplImage *CombineImage(IplImage *rgbImg, IplImage *greyImg)
{
	if (rgbImg == NULL || greyImg == NULL)
		return NULL;

	int width = rgbImg->width;
	int height = rgbImg->height;

	IplImage *combImg = cvCreateImage(cvSize(width * 2, height), 8, 3);
	IplImage *cvtImg = cvCreateImage(cvSize(width, height), 8, 3);
	cvCvtColor(greyImg, cvtImg, CV_GRAY2BGR);

	for (int row = 0; row < combImg->height; row++)
	{
		for (int col = 0; col < combImg->width; col++)
		{
			if (col < width)
			{
				CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col);
				CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 1) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col + 1);
				CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 2) = CV_IMAGE_ELEM(rgbImg, unsigned char, row, 3 * col+ 2);
			}
			else
			{
				CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col-width));
				CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 1) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col - width) + 1);
				CV_IMAGE_ELEM(combImg, unsigned char, row, 3 * col + 2) = CV_IMAGE_ELEM(cvtImg, unsigned char, row, 3 * (col - width) + 2);
			}
		}
	}

	cvReleaseImage(&cvtImg);
	return combImg;
}


 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值