java-opencv Image和Mat相互转换
Image(1.png)被转换成Mat后写入2.png,两张图片无区别Mat(1.png)被转换成Image后写入2.png,两张图片无区别
·
导入jar包需要dll
Image转换成Mat
package opencv;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
public class Test7 {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);//加载库,否则会出错
}
public static void main(String[] args) throws IOException {
Image i = ImageIO.read(new File("D:\\1.png"));//Image图片
Mat m = new Mat(((BufferedImage) i).getHeight(), ((BufferedImage) i).getWidth(), CvType.CV_8UC3);//Mat图片
DataBuffer d = ((BufferedImage) i).getRaster().getDataBuffer();//获取输入流
byte[] b = ((DataBufferByte) d).getData();//Image转换成二进制数据
m.put(0, 0, b);//二进制数据转换成Mat
Imgcodecs.imwrite("D:\\2.png", m);
}
}
结果
Image(1.png)被转换成Mat后写入2.png,两张图片无区别
Mat转换成Image
package opencv;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.RenderedImage;
import java.io.*;
public class Test8 {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);//加载库,否则会出错
}
public static void main(String[] args) throws IOException {
Mat m = Imgcodecs.imread("D:\\1.png");//Mat图片
Image i;//Image图片
MatOfByte b = new MatOfByte();//保存的二进制数据
Imgcodecs.imencode(".png", m, b);//Mat转换成二进制数据。.png表示图片格式,格式不重要,基本不会对程序有任何影响。
i = ImageIO.read(new ByteArrayInputStream(b.toArray()));//二进制数据转换成Image
ImageIO.write((RenderedImage) i, "png", new File("D:\\2.png"));
}
}
结果
Mat(1.png)被转换成Image后写入2.png,两张图片无区别
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)