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

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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();

它对我有用。

【讨论】:

以上是关于在 sqlite3 数据库中存储精确的 cv::Mat 图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 在 sqlite3 数据库中存储大量 API 数据的最有效方法

如何将 sqlite3 数据库文件存储在应用程序的 Library 目录中?

这个 Rails 文件存储在哪里? db/development.sqlite3

转iOS开发24:使用SQLite3存储和读取数据

python3教程:jsonpickle和sqlite3持久化存储字典对象

python3教程:jsonpickle和sqlite3持久化存储字典对象