2012-03-06 13 views

答えて

1

++あなたがサポートされているすべてのプラットフォーム上で完全なAPIを持っています。

XML/YAML Persistence

XML/YAML Persistence (C API)

AndroidのJava APIは、永続化APIをエクスポートしませんが、いくつかのクラスは、セーブ/ロードメソッドを提供それらの構成のために。

0

OpenCV4Androidはまだ独自の永続性を持っていないので、私の意見では、Matを保存する最も普遍的な方法は、まずJSONのようなデータ交換形式に変換することです。

この変換を実行できるようになると、それを格納する柔軟性が大幅に向上します。 JSONは簡単に文字列に変換され、ネットワーク接続経由​​で送信されます。

OpenCV C++ you are able to store data as YAMLでは、Andrey Kamaevが指摘していたようにAndroidではまだ利用できません。ここのJSONはYAMLと同じ目的を持っています。

JSONをJavaで解析するには、この簡単にlibrary Google GSONを使用できます。

そして、ここでは正確に(問題がある場合は私に知らせて、私は簡単なテストを行なったし、それが働いていた)を行うには、私の最初の試みである:

public static String matToJson(Mat mat){   
    JsonObject obj = new JsonObject(); 

    if(mat.isContinuous()){ 
     int cols = mat.cols(); 
     int rows = mat.rows(); 
     int elemSize = (int) mat.elemSize();  

     byte[] data = new byte[cols * rows * elemSize]; 

     mat.get(0, 0, data); 

     obj.addProperty("rows", mat.rows()); 
     obj.addProperty("cols", mat.cols()); 
     obj.addProperty("type", mat.type()); 

     // We cannot set binary data to a json object, so: 
     // Encoding data byte array to Base64. 
     String dataString = new String(Base64.encode(data, Base64.DEFAULT)); 

     obj.addProperty("data", dataString);    

     Gson gson = new Gson(); 
     String json = gson.toJson(obj); 

     return json; 
    } else { 
     Log.e(TAG, "Mat not continuous."); 
    } 
    return "{}"; 
} 

public static Mat matFromJson(String json){ 
    JsonParser parser = new JsonParser(); 
    JsonObject JsonObject = parser.parse(json).getAsJsonObject(); 

    int rows = JsonObject.get("rows").getAsInt(); 
    int cols = JsonObject.get("cols").getAsInt(); 
    int type = JsonObject.get("type").getAsInt(); 

    String dataString = JsonObject.get("data").getAsString();  
    byte[] data = Base64.decode(dataString.getBytes(), Base64.DEFAULT); 

    Mat mat = new Mat(rows, cols, type); 
    mat.put(0, 0, data); 

    return mat; 
} 
関連する問題