OpenCV Java 问题记录 - Mat类型和BufferedImage类型的相互转化

将Mat类型转化成BufferedImage类型

/**
* 将Mat类型转化成BufferedImage类型
* 
* @param amatrix Mat对象
* @param fileExtension 文件扩展名
* @return
*/
public static BufferedImage Mat2Img(Mat mat, String fileExtension) {
    MatOfByte mob = new MatOfByte();


    Highgui.imencode(fileExtension, mat, mob);
    // convert the "matrix of bytes" into a byte array
    byte[] byteArray = mob.toArray();
    BufferedImage bufImage = null;
    try {
        InputStream in = new ByteArrayInputStream(byteArray);
        bufImage = ImageIO.read(in);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return bufImage;
}

将BufferedImage类型转换成Mat类型 

/**
* 将BufferedImage类型转换成Mat类型 
* @param bfImg
* @param imgType bufferedImage的类型 如 BufferedImage.TYPE_3BYTE_BGR
* @param matType 转换成mat的type 如 CvType.CV_8UC3
* @return
*/
public static Mat Img2Mat(BufferedImage bfImg, int imgType, int matType) {
    BufferedImage original = bfImg;
    int itype = imgType;
    int mtype = matType;
    
    if (original == null) {
        throw new IllegalArgumentException("original == null");
    }
    
    if (original.getType() != itype) {
        BufferedImage image = new BufferedImage(original.getWidth(),                                                        original.getHeight(), itype);

        Graphics2D g = image.createGraphics();
        try {
            g.setComposite(AlphaComposite.Src);
            g.drawImage(original, 0, 0, null);
        } finally {
            g.dispose();
        }
    }
    
    byte[] pixels = ((DataBufferByte) original.getRaster().getDataBuffer()).getData();
    Mat mat = Mat.eye(original.getHeight(), original.getWidth(), mtype);
    mat.put(0, 0, pixels);

    return mat;
}  

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值