在sqlite3数据库中存储精确的cv :: Mat图像

时间:2013-03-04 09:19:56

标签: qt opencv sqlite

有没有办法使用 Qt 在sqlite3中存储精确的 cv :: Mat 格式数据..因为我将来会使用相同的cv :: Mat格式..

我尝试将图片转换为 unsigned char * 并将它们存储起来..但这对我没有用..其他任何技术?

1 个答案:

答案 0 :(得分:3)

您可以将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();
}

它对我有用。

相关问题