尝试使用OpenCV(Java)更改小png图像的颜色
在这里,我使用OpenCV库和java将透明部分更改为白色,将其内部形状更改为黑色,略厚。我尝试使用cvtColor(img、hsv、Imgproc.COLOR\u bgr2 gray);但整个图像变为灰色。我需要帮助 这是我需要改变颜色的原始图像 处理后的输出图像:尝试使用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
< 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);