Сохранять OpenCV :: Mat в SQLite DB как BLOB - PullRequest
0 голосов
/ 28 ноября 2018

Можно ли сохранить изображение из opencv :: Mat в базу данных sqlite (как BLOB или другой тип)?Я могу хранить другие переменные, такие как строка, но не cv :: Mat в. Вот мой код функции

void SQLiteWrapper::WriteDetectInfo(std::string markName, std::string dmgClass, cv::Mat in)
{
    char *zErrMsg = 0;
    std::ostringstream strQuery;

    strQuery << "INSERT INTO DetectedDamage(Markname, Class, Image)";
    strQuery << "VALUES('" << markName;
    strQuery << "','" << dmgClass;
    strQuery << "'," << in;
    strQuery << ");";
    std::string query = strQuery.str();
    int rc = sqlite3_exec(DB3, query.c_str(), SQLiteWrapper::CallBack, (void*)CB_WRITE_DETECT_INFO, &zErrMsg);
}

1 Ответ

0 голосов
/ 28 ноября 2018

Для сохранения изображения в формате BLOB вам необходимо сначала преобразовать мат в char*.Для этого вы можете использовать cv::imencode().и затем вы можете вставить данные BLOB-объекта как:

int rc = 0;
char* buffer = new char[size]; // Your image data from `cv::imencode()`

sqlite3_stmt *strQuery = NULL;
sqlite3_prepare_v2(db,"INSERT INTO DetectedDamage(Markname, Class, Image) VALUES (NULL, NULL, ?)", -1, &strQuery, NULL);

sqlite3_bind_blob(strQuery, 1, buffer, size, SQLITE_STATIC);
if (rc != SQLITE_OK) {
    std::cerr << "bind failed!" << std::endl;
} else {
    rc = sqlite3_step(strQuery);
    if (rc != SQLITE_DONE)
        std::cerr << "execution failed!" << sqlite3_errmsg(db) << std::endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...