1. 基础知识
- JPG 格式图片有损压缩和不支持半透明,如果想在图片上添加透明通道,一定不要用 JPG 格式的图片;
- PNG:既支持3通道RGB图像,也支持4通道RGBA图像(红色、绿色、蓝色和透明度);
- 透明度值:如果像素深度为8位,那么 0 表示完全透明,255 表示完全不透明;
- java 语言的 byte 类型为有符号,无符号的 255 等于有符号的 -1,这个要特别注意;
2. 使用 cvtColor 增加透明通道
public void test(){
Mat mat = imread("./src.png");
Mat dst = new Mat();
cvtColor(mat, dst, CV_RGB2RGBA);
imwrite("./dst.png", dst);
}
3. 修改特定区域像素点的透明度值
下面的代码,将原始图片从左到右,由完全透明到完全不透明,渐变!!
public void test(){
Mat mat = imread("./src.png");
Mat dst = new Mat();
cvtColor(mat, dst, CV_RGB2RGBA);
int nRows = mat.rows();
int nCols = mat.clos();
int step = nCols/256 + 1;
for(int i = 0; i< nRows; i++){
for(int j = 0; j< nCols ; j++){
dst.ptr(i,j).put(3, (byte)(j/step)); // 透明通道 index = 3;
}
}
imwrite("./dst.png", dst);
}
原图:
处理后效果(背景色为黑,完全透明显示黑色):