近一段时间在做图像处理方面的内容,基于openCV做了一些东西,其中遇到一些问题,如题就是其中一个。
最初的叠加使用了openCV提供的cvAddWeighted 函数,却发现不是我想要的效果,原来png图片透明的地方并没有透明,而且更奇怪的是,png图片显示出来也完全不是原来的样子,像这样:
查了文档才知道,原来openCV在读取图片的时候,默认是3通道的,也就是把alpha通道干掉了,实在让我汗颜。读取png图片的时候这样就可以了:
cvLoadImage(imageName, CV_LOAD_IMAGE_UNCHANGED),
对比下之前的默认设置,你会发现nChannels变为了4,另外imageData也多了一个通道的数据,png图像读取完成了。但是遗憾的是,在使用cvShowImage显示图像时,显示的还是右图那个很丑陋的图像,这个实在无法接受,找了半天没有解决方案,看来openCV真的不想支持,这个不科学。由于不影响后面的叠加,我暂时接受这个设定。