1

我的系统有一个 Mat 图像,我希望能够将它存储在我的 sqlite 数据库中。所以我想我需要尝试将它转换为字节数组才能存储它。但是我不确定这是正确的,因为我不确定如何使用我得到的值,如果我要从 db 访问它以便能够将其转换回其原始 Mat 图像。以下是我到目前为止提出的内容:

static byte[] matToByte(Mat mat) throws SQLException {
    int length = (int) (mat.total()*mat.elemSize());
    byte buffer[] = new byte[length];
    int converted = mat.get(0, 0, buffer);

    IrisInitialDatabase.addFeatures(converted);

    return buffer;

}

static Mat byteToMat(byte[] value) {
    Mat m = new Mat();
    m.put(0, 0, value);

    return m;
}

谢谢 :)

4

1 回答 1

2

以 Base64 格式保存到数据库中。

  1. 垫到位图

    Bitmap image = Bitmap.createBitmap(rgba.cols(),
            rgba.rows(), Bitmap.Config.RGB_565);
    
    Utils.matToBitmap(rgba, image);
    
    Bitmap bitmap = (Bitmap) image;
    bitmap = Bitmap.createScaledBitmap(bitmap, 600, 450, false);
    
  2. 位图到字节数组

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
    byte[] byteArray = byteArrayOutputStream .toByteArray();
    

---保存到数据库---

  1. 拿回垫子

    m = Highgui.imdecode(new MatOfByte(Base64.decode(base64ImageFromDB,0)),Highgui.IMREAD_UNCHANGED);
    
于 2017-04-25T14:02:05.850 回答