как манипулировать сущностью cv :: mat в структуре в c ++

0

У меня есть n изображений, после операции opencv каждое изображение будет иметь свой собственный файл мата. Я пытаюсь сохранить это в структуре. Моя структура выглядит следующим образом:

struct _img_info {
    char name[40];
    Mat des;
} * img_info;

Я могу вычислить Mat temp, а затем попробуйте его содержимое в _img_info des. однако я получаю ошибку сегментации. Мой код дампа:

img_info mydes = (img_info)malloc(sizeof(struct _img_info));
Mat fg2(2,3,CV_32F,2);
mydes->des = fg2.clone ();
cout << mydes->des << endl;

не могли бы вы дать мне представление о том, как манипулировать типом Mat в структуре. Спасибо.

  • 1
    Можете ли вы опубликовать свой код, как вы пытаетесь установить значение des и как вы пытаетесь манипулировать? Обычно вы можете просто сделать: your_img_info.des = temp.clone ();
  • 0
    Я довольно новичок в opencv, сначала я пытаюсь _img_info.des = temp , и это дает ошибку сегментации. Я попробую твой путь.
Показать ещё 3 комментария
Теги:
opencv
structure
mat

1 ответ

0

осторожно! :

Mat fg2(2,3,CV_32F,2);

вы, вероятно, ожидали, что Mat будет инициализирован Scalar (2), но вместо этого он взял 2 в качестве (несуществующего) указателя на внешние данные; ([и это, вероятно, clone(), а не назначение, которое разбилось из-за этого]

вместо этого используйте:

Mat fg2(2,3,CV_32F,Scalar(2.0)); // explicit value
// or even:
Matx23f fg2(2.0,2.0,2.0,2.0,2.0,2.0);

и вам, вероятно, не нужен клон() в этом случае

также, поскольку ваша структура содержит объект c++/RAII, пожалуйста , не используйте malloc/free, но new/delete, иначе деструктор Mat не будет вызван.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню