将 Mat 对象转换为 BufferedImage 对象

Daniel Baggio 的这个例子是直接从这个 StackExchange 答案中获取的 ,但是已被重新发布以供查看。

此类接受 Mat 对象并返回 javax.swing 库使用的 BufferedImage 对象。Graphics 对象可以使用它来绘制图像。

private BufferedImage toBufferedImage(Mat m) {
    if (!m.empty()) {
        int type = BufferedImage.TYPE_BYTE_GRAY;
        if (m.channels() > 1) {
            type = BufferedImage.TYPE_3BYTE_BGR;
        }
        int bufferSize = m.channels() * m.cols() * m.rows();
        byte[] b = new byte[bufferSize];
        m.get(0, 0, b); // get all the pixels
        BufferedImage image = new BufferedImage(m.cols(), m.rows(), type);
        final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
        System.arraycopy(b, 0, targetPixels, 0, b.length);
        return image;
    }
    
    return null;
}