我有n个图像,在opencv操作后,每个图像都有自己的mat文件。我试着将它保留在结构数组中。我的结构如下:
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类型。谢谢。
答案 0 :(得分: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);
在这种情况下你可能不需要clone()
另外,由于你的struct包含 c ++ / RAII对象,请不要使用malloc / free,而是使用new / delete ,否则Mat的析构函数将无法获取调用。