2017-04-25 73 views
0

我有我的系统的mat图像,我想能够将其存储在我的sqlite数据库。所以我想我需要尝试将它转换为一个字节数组来存储它。但后来林不知道这是正确的,因为我不确定如何使用我得到的价值,如果我从数据库访问它能够将其恢复到其原始的图像。 下面是我想出迄今:如何将Mat转换为字节数组,存储该值然后再将其转换回来? java opencv

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

谢谢:)

回答

0

保存它以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(); 
    

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

  • GET垫回

    m = Highgui.imdecode(new MatOfByte(Base64.decode(base64ImageFromDB,0)),Highgui.IMREAD_UNCHANGED); 
    
  • +0

    谢谢你,我似乎并没有把位图类型,你知道我可以得到它,我不认为它是包含在我的OpenCV的lib – LiL

    +0

    位图是默认的Android库 https://developer.android.com/reference/android/graphics/Bitmap.html 刚刚导入 '进口android.graphics.Bitmap;' – tompadre

    +0

    我很高兴它的工作原理,请记住我答案是正确的。 :) – tompadre

    相关问题