java - 尝试使用 OpenCV (Java) 更改小 png 图像的颜色

标签 java opencv image-processing opencv3.0 javacv

我在这里使用 OpenCV lib 和 java 将透明部分更改为白色,并将其内部的形状更改为黑色和稍厚。我尝试使用 cvtColor(img, hsv, Imgproc.COLOR_BGR2GRAY);但整个图像变成灰色。我需要这方面的帮助

这是我需要改变颜色的原始图像

image

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);

处理后的输出图像:

image

最佳答案

(1) Read the PNG with Alpha channel with the flag IMREAD_UNCHANGED.

(2) Then Split the channels and get the alpha.

(3) Other steps ...

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);
    }
}

透明:

enter image description here

阿尔法:

enter image description here

关于java - 尝试使用 OpenCV (Java) 更改小 png 图像的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50247758/

相关文章:

java - 如何使用 Mockito 实现复合对象

java - 将 HMAC 函数从 Java 转换为 JavaScript

opencv - 如何在 OpenCV C++ 中将 16 位图像转换为 8 位图像

php - 如何雕刻半只感恩节火鸡?

java - iBatis SqlMapClient 和线程安全

java - 为什么我会收到 .jar 文件的所有这些错误 "cannot resolve symbol R"和 "Content is not allowed in prolog"?

opencv - 如何查找在C++/CLI中使用Contours方法OpenCV选择的随机形状对象的长度和宽度

c++ - BGR 到 HSV 然后再返回

python - 使用 OPENCV 进行产品识别

python - Tensorflow 的对象检测 API 的输出是什么?