Сохранение ROI openCV в двоичный файл на C ++ - PullRequest
0 голосов
/ 01 августа 2020

У меня есть нестандартная структура:

struct custom_roi{
    Mat roi;
    int x;
    int y;
};

Я пытаюсь сохранить эту структуру в двоичный файл на C ++. Я использую следующий код:

    ofstream wf;
    wf.open("roi.dat", ios::out | ios::binary);

    if (!wf) {
        cout << "Cannot open file!" << endl;
        return 1;
    }

    string image_path = "D:/images/pic1.jpg";

    Mat LoadedImage;
    LoadedImage = imread(image_path, IMREAD_COLOR);

    FileStorage fs;

    custom_roi wsf;
    Rect Rec(100, 100, 400, 400);
    Mat roi = LoadedImage(Rec);

    wsf.x = 100;
    wsf.y = 100;
    roi.copyTo(wsf.roi);

    wf.write((char*)&wsf, sizeof(custom_roi));

    wf.close();

Быстрый просмотр переменной custom_roi

Когда я пытаюсь прочитать файл обратно, значения размеров x, y и roi верны, но появляется сообщение « Ошибка чтения символов строки ». Что я делаю не так? Мы будем очень благодарны за вашу помощь. Спасибо.

1 Ответ

0 голосов
/ 01 августа 2020

После долгих исследований я нашел то, что мне нужно:

fs.write(mat.ptr<char>(0), (mat.dataend - mat.datastart));

Я нашел это здесь Эффективно загрузить большой коврик в память в OpenCV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...