将精确的cv :: Mat图像存储在sqlite3数据库中 [英] store exact cv::Mat image in sqlite3 database

查看:294
本文介绍了将精确的cv :: Mat图像存储在sqlite3数据库中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

is there any way to store exact cv::Mat format data in sqlite3 using Qt.. as i will be using the same cv::Mat format in future..

我尝试将图像转换为未签名的字符* ,然后将其存储..但这对我不起作用..任何其他技术??

i tried converting image to unsigned char* and them storing it.. but this didn't worked for me.. any other technique ??

推荐答案

您可以将cv :: Mat序列化为QByteArray(请参见

You can serialize cv::Mat to QByteArray (see 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. 从数据库读取后要从QByteArray转换:

Then store to DB. To convert from QByteArray after reading from DB:

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

对我有用.

这篇关于将精确的cv :: Mat图像存储在sqlite3数据库中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆