Opencv作为开源的免费软件,bug和功能上都有问题(可以用Intel的ipp来代替)
比如png带透明度的文件,查资料说,Opencv不支持png的第4个通道,即透明度通道。
有的说要修改opencv里png解码函数然后重新编译实现对透明通道的支持,但这方法很麻烦,ios、android、windows下都要重新编译。
抱着试试的想法,实验了一下,貌似解决了问题:
1、cvloadimage载入png文件时,默认的第2个参数是1,即CV_LOAD_IMAGE_COLOR,生成的iplimage对象的channel数是3,而不是4,丢失了第4通道。需要改为cvloadimage(pbuf,-1)得到的iplimage对象就是4个channel;
2、opencv的cvshowimage函数,显示对应的iplimage对象还是错误的,可以忽略不管丫的。
3、在对生成的iplimage对象处理时,记得要处理第4个通道的数据,比如得到每个像素点的cvscalar对象a,要对a.val[3]数据进行处理!
4、保存时,可以直接使用cvsaveimage函数保存为png文件,不需要考虑第三个参数的设置。