OpenCV4.3 Java 编程入门:透明度与抠图

1. 基础知识

  1. JPG 格式图片有损压缩和不支持半透明,如果想在图片上添加透明通道,一定不要用 JPG 格式的图片;
  2. PNG:既支持3通道RGB图像,也支持4通道RGBA图像(红色、绿色、蓝色和透明度);
  3. 透明度值:如果像素深度为8位,那么 0 表示完全透明,255 表示完全不透明;
  4. 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);
}

原图:
OpenCV4.3 Java 编程入门:透明度与抠图_第1张图片
处理后效果(背景色为黑,完全透明显示黑色):
OpenCV4.3 Java 编程入门:透明度与抠图_第2张图片

你可能感兴趣的:(opencv,Java,java,python,开发语言)