Qtを使用して正確なcv::Mat形式のデータをsqlite3に保存する方法はありますか..将来同じcv::Mat形式を使用するため..
画像をunsigned char*に変換して保存しようとしましたが、これはうまくいきませんでした..他の手法はありませんか??
cv::Mat を QByteArray にシリアライズできます ( kde/libkfaceを参照):
QByteArray mat2ByteArray(const cv::Mat &image)
{
QByteArray byteArray;
QDataStream stream( &byteArray, QIODevice::WriteOnly );
stream << image.type();
stream << image.rows;
stream << image.cols;
const size_t data_size = image.cols * image.rows * image.elemSize();
QByteArray data = QByteArray::fromRawData( (const char*)image.ptr(), data_size );
stream << data;
return byteArray;
}
次にDBに格納します。DB から読み取った後に QByteArray から変換するには:
cv::Mat byteArray2Mat(const QByteArray & byteArray)
{
QDataStream stream(byteArray);
int matType, rows, cols;
QByteArray data;
stream >> matType;
stream >> rows;
stream >> cols;
stream >> data;
cv::Mat mat( rows, cols, matType, (void*)data.data() );
return mat.clone();
}
わたしにはできる。