opencv实现图片叠加透明度-尽管opencv不支持阿尔法通道

因为opencv不支持阿尔法通道(也有的说最新版本的其实是支持了的,在此我不做肯定),但要是两张图片去叠加的话,其实还是可以简单实现透明叠加的,这也是制作水印图片的方法。
比如,我们把图片B叠加到图片A上.透明的实际效果就是既能看到A的内容,又能看到B的内容.

终值 = Va*(1-rank/10)+Vb*(rank/10)

///下边是关键代码,有注释

//先说一下,pimg是大图(也可以理解为背景图),watermarkpic是水印图片(你的水印logo,或者文字),是IplImage格式指针
//注意数组的越界问题,水印图片要比pimg的小才行的。如果大了,就缩小一下就可以了


		//把水印图片的像素值写到pImg的ROI中
		CvScalar scalar1,scalar2,scalar3;
		//透明度参数
		double dbAlpha;
                //1-10,0为不透明,10为透明(也就是不显示水印图片),所以实际值为1-9
		dbAlpha = 2;
		for (int i=0;iheight;i++)
		{
			for (int j=0;jwidth;j++)
			{
				//得到水印图片对应的值
				//这其实也可以设置一下透明度的 hyaline
				//scalar=cvGet2D(watermarkpic,i,j);//这行是完全不透明的语句
				scalar1 = cvGet2D(watermarkpic,i,j);//水印图片像素值
				scalar2 = cvGet2D(pImg,i,j);//pimg像素值
				for (int k =0;k<4;k++)
				{
                                        //开始赋值,也就是合成后图片对应的像素值
					scalar3.val[k] = scalar1.val[k]*(1-dbAlpha)+scalar2.val[k]*dbAlpha;

				}

				cvSet2D(pImg,i,j,scalar3);

			}
		}

下边附3张效果图:

opencv叠加透明效果图

opencv叠加透明效果图

opencv叠加透明效果图

最后,感谢美女范冰冰小姐的友情客串.
ps:图片来自截屏软件,就有添加透明水印的效果哦,可自定义水印位置哈:http://www.youthtribe.com/snapshot/

One comment

Leave a Reply