postgresql データベースから取得したイメージを c++ opencv にロードしたいと考えています。拡張子jpgの画像はベースにバイナリデータ(bytea型)で保存されており、libpqxxでアクセスできます。
問題は、データを cv::Mat インスタンスに変換する方法がわからないことです。通常の画像では imread('myImage.jpg', ...) を使用できますが、この場合、bmp ではなく jpeg であるため、Mat のデータ属性にデータベース画像をロードすることさえできません。
何か案が ?バイナリデータを直接理解して適切な構造に変換できるopencvメソッドはありますか? imdecode() 関数はビットマップ データに使用されているようです。
edit : Berak、ベクトルを使用すると imdecode 関数は null を返します。コードは次のとおりです。
pqxx::result r=bdd::requete("SELECT image FROM lrad.img WHERE id=3",1);//returns the bytea image in r[0]["image"]
const char* buffer=r[0]["image"].c_str();
vector<uchar>::size_type size = strlen((const char*)buffer);
vector<uchar> jpgbytes(buffer, buffer+size);
Mat img = imdecode(jpgbytes, CV_LOAD_IMAGE_COLOR);
//jpgbytes.size()=1416562 img.size()=[0 x 0]
何が欠けていますか?