【问题标题】:store exact cv::Mat image in sqlite3 database在 sqlite3 数据库中存储精确的 cv::Mat 图像
【发布时间】:2013-03-04 09:19:56
【问题描述】:

有什么方法可以使用 Qt 在 sqlite3 中存储精确的 cv::Mat 格式数据。因为我将来会使用相同的 cv::Mat 格式..

我尝试将图像转换为 unsigned char* 并将其存储..但这对我不起作用..任何其他技术??

【问题讨论】:

    标签: qt opencv sqlite


    【解决方案1】:

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

    然后存储到数据库。 从数据库读取后从 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();
    }
    

    它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多