javacv中byte[]、BufferImage、Mat的互转

最近在研究使用opencv对普通图片进行扣章的功能,在python上实现了,然后想使用在java上,java在选择jar包时选择了javacv(当然还有更原生的opencv,但由于考虑到后面可能会用到ffmpeg所以还是使用javacv) 到javacv的官网(http://bytedeco.org)上看了下,果然很强大,很多其它的包也有比如:numpy,tensorflow等python中使用到的库。 我是在javacv的sample中找到的相关方法。

/**
     * BufferImage转byte[]
     * @param original
     * @return
     */
    public static byte[] bufImg2Bytes(BufferedImage original){
        ByteArrayOutputStream bStream = new ByteArrayOutputStream();
        try {
            ImageIO.write(original, "png", bStream);
        } catch (IOException e) {
            throw new RuntimeException("bugImg读取失败:"+e.getMessage(),e);
        }
        return bStream.toByteArray();
    }

    /**
     * byte[]转BufferImage
     * @param imgBytes
     * @return
     */
    pu
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 OpenCV 的 `Java2DFrameConverter` 和 `BufferedImageToMat` 类来实现 `Mat` 转 `BufferedImage` 和 `BufferedImage` 转 `Mat` 的转换。 下面是将 `Mat` 转换为 `BufferedImage` 的示例代码: ```java import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.videoio.VideoCapture; import org.opencv.videoio.Videoio; import org.opencv.imgcodecs.Imgcodecs; import java.awt.image.BufferedImage; import javax.swing.*; import org.bytedeco.javacv.Java2DFrameConverter; public class MatToBufferedImageExample { public static void main(String[] args) { // 加载OpenCV本地库 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 加载图像到Mat对象 Mat mat = Imgcodecs.imread("path/to/image.jpg"); // 创建Java2DFrameConverter对象 Java2DFrameConverter converter = new Java2DFrameConverter(); // 转换MatBufferedImage对象 BufferedImage image = converter.convertToBufferedImage(mat); // 显示图像 JFrame frame = new JFrame("Image"); frame.getContentPane().add(new JLabel(new ImageIcon(image))); frame.pack(); frame.setVisible(true); } } ``` 下面是将 `BufferedImage` 转换为 `Mat` 的示例代码: ```java import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.videoio.VideoCapture; import org.opencv.videoio.Videoio; import org.opencv.imgcodecs.Imgcodecs; import java.awt.image.BufferedImage; import javax.swing.*; import org.bytedeco.javacv.BufferedImageToMat; public class BufferedImageToMatExample { public static void main(String[] args) { // 加载OpenCV本地库 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 加载图像到BufferedImage对象 BufferedImage image = ImageIO.read(new File("path/to/image.jpg")); // 创建BufferedImageToMat对象 BufferedImageToMat converter = new BufferedImageToMat(); // 转换BufferedImageMat对象 Mat mat = converter.convert(image); // 显示图像 Imgcodecs.imwrite("path/to/output_image.jpg", mat); } } ``` 这些示例代码需要使用到 OpenCVJavaCV 的库,请确保您已经成功安装了这些库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值