將 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;
}