У меня есть 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 в структуре. Спасибо.
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 не будет вызван.