java - 尝试使用 OpenCV (Java) 更改小 png 图像的颜色
问题描述
在这里,我使用带有 java 的 OpenCV lib 将透明部分更改为白色,并将其内部的形状更改为黑色和小粗。我尝试使用 cvtColor(img, hsv, Imgproc.COLOR_BGR2GRAY); 但整个图像变为灰色。我需要帮助
这是我需要更改颜色的原始图像
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String img_url1 = "C:\\\\Users\\\\me\\\\Desktop\\\\cpt\\\\1.png";
Mat img = Imgcodecs.imread(img_url1);
if( img.empty() ) {
System.out.println("Error opening image!");
System.out.println("Program Arguments: [image_name -- default ../data/lena.jpg] \n");
System.exit(-1);
}
Mat hsv = new Mat();
Imgproc.cvtColor(img, hsv, Imgproc.COLOR_BGR2GRAY);
Imgcodecs.imwrite("C:\\\\Users\\\\me\\\\Desktop\\\\cpt\\\\1-cpy.png", hsv);
处理后输出图像:
解决方案
(1) 阅读
PNG
带有Alpha channel
标志的 withIMREAD_UNCHANGED
。(2) 然后拆分通道并获得 alpha。
(3) 其他步骤...
import java.util.*;
import org.opencv.core.*;
import org.opencv.imgproc.Imgproc;
import org.opencv.imgcodecs.Imgcodecs;
public class xtmp{
public static void main(String[] args){
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
test();
}
static void test(){
// Read with alpha channel
Mat img = Imgcodecs.imread("transparent.png", Imgcodecs.IMREAD_UNCHANGED);
// Split the channels and get the alpha
List<Mat> bgra = new ArrayList<Mat>(4);
Core.split(img, bgra) ;
// Save
Mat alpha = bgra.get(3);
Imgcodecs.imwrite("alpha.png", alpha);
}
}
透明的:
Α:
推荐阅读
- python - 用python点击一个按钮
- ios - 如果不快速执行任何操作,如何重复本地通知
- html - 在整个页面中居中加载 Css
- angular - 带有 CDK 表/材料设计的表中的单选按钮
- ios - 如何使用 UICollectionView 的 selectItem 在 collectionView 单元格上绘图?
- android - 无法弄清楚 Android 中的布局依赖项
- git - 手动创建标记,例如 git merge 与来自差异的冲突
- android - 升级到 Android Gradle 插件 3.3.0 时出现无效的 Crashlytics API 密钥错误
- java - 如何更新 jlist swing java
- java - 如何将现有文件移动到新包中?