Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用OpenCV(Java)更改小png图像的颜色_Java_Opencv_Image Processing_Opencv3.0_Javacv - Fatal编程技术网

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

尝试使用OpenCV(Java)更改小png图像的颜色,java,opencv,image-processing,opencv3.0,javacv,Java,Opencv,Image Processing,Opencv3.0,Javacv,在这里,我使用OpenCV库和java将透明部分更改为白色,将其内部形状更改为黑色,略厚。我尝试使用cvtColor(img、hsv、Imgproc.COLOR\u bgr2 gray);但整个图像变为灰色。我需要帮助 这是我需要改变颜色的原始图像 处理后的输出图像: < P>这是一个C++代码,但是你可以很容易地把它转换成java。 Mat img = imread("image.png",-1); //split channels, extract 3rd channel

在这里,我使用OpenCV库和java将透明部分更改为白色,将其内部形状更改为黑色,略厚。我尝试使用cvtColor(img、hsv、Imgproc.COLOR\u bgr2 gray);但整个图像变为灰色。我需要帮助

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

处理后的输出图像:


< P>这是一个C++代码,但是你可以很容易地把它转换成java。
  Mat img = imread("image.png",-1);

  //split channels, extract 3rd channel
  std::vector<Mat> channels;
  split(img, channels);

  // convert to white background and black foreground
  Mat black;
  bitwise_not(channels.at(3), black);


  imshow("image", black);
  waitKey(0);
Mat img=imread(“image.png”,-1);
//分割频道,提取第三频道
矢量信道;
分割(img,通道);
//转换为白色背景和黑色前景
垫黑;
按位_not(在(3)处的通道,黑色);
imshow(“图像”,黑色);
等待键(0);

(1) 使用
Alpha通道
读取
PNG
,且标记
IMREAD\u保持不变

(2) 然后分割通道并获得alpha

(3) 其他步骤

import java.util.*;
导入org.opencv.core.*;
导入org.opencv.imgproc.imgproc;
导入org.opencv.imgcodecs.imgcodecs;
公共类xtmp{
公共静态void main(字符串[]args){
System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME);
test();
}
静态孔隙试验(){
//用alpha通道读取
Mat img=Imgcodecs.imread(“transparent.png”,Imgcodecs.imread_未更改);
//分割通道并获取alpha
List bgra=新阵列列表(4);
核心。拆分(img、bgra);
//拯救
Mat alpha=bgra.get(3);
Imgcodecs.imwrite(“alpha.png”,alpha);
}
}
透明的:

阿尔法:


我刚刚在@zindarod answer的帮助下找到了答案,以下是解决方案

         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         String img_url1 = "C:\\\\Users\\\\me\\\\Desktop\\\\cpt\\\\1.png";
         Mat img = Imgcodecs.imread(img_url1, -1);


         List<Mat> channels = new ArrayList<>();
         Core.split(img, channels);

         Mat black = new Mat();
         Core.bitwise_not(channels.get(3), black);

         String file2 = "C:\\\\\\\\Users\\\\\\\\me\\\\\\\\Desktop\\\\\\\\cpt\\\\\\\\1-cpy.png"; 
         Imgcodecs.imwrite(file2, black);
System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME);
字符串img\u url1=“C:\\\\Users\\\\me\\\\Desktop\\\\cpt\\\\1.png”;
Mat img=Imgcodecs.imread(img_url1,-1);
列表通道=新的ArrayList();
核心。拆分(img、通道);
Mat黑色=新Mat();
Core.bitwise_not(channels.get(3),黑色);
String file2=“C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
Imgcodecs.imwrite(文件2,黑色);

如果将格式设置为
COLOR\u bgr2 gray
,您希望发生什么?OpenCV新增。。它可能会将整个颜色更改为灰色?可能会将整个颜色更改为白色,形状更改为黑色?感谢兄弟的帮助。。我刚刚把你的C++转换成java,它工作100%非常感谢兄弟我已经找到了解决方案…让我试试这个,先生,有可能在那个正方形部分填充(任何)颜色吗?
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);
    }
}
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         String img_url1 = "C:\\\\Users\\\\me\\\\Desktop\\\\cpt\\\\1.png";
         Mat img = Imgcodecs.imread(img_url1, -1);


         List<Mat> channels = new ArrayList<>();
         Core.split(img, channels);

         Mat black = new Mat();
         Core.bitwise_not(channels.get(3), black);

         String file2 = "C:\\\\\\\\Users\\\\\\\\me\\\\\\\\Desktop\\\\\\\\cpt\\\\\\\\1-cpy.png"; 
         Imgcodecs.imwrite(file2, black);