3

Qtを使用して正確なcv::Mat形式のデータをsqlite3に保存する方法はありますか..将来同じcv::Mat形式を使用するため..

画像をunsigned char*に変換して保存しようとしましたが、これはうまくいきませんでした..他の手法はありませんか??

4

1 に答える 1

4

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

わたしにはできる。

于 2014-01-31T05:50:55.297 に答える