如何在c ++中的结构中操作cv :: mat实体

时间:2014-12-06 21:10:30

标签: c++ opencv structure mat

我有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类型。谢谢。

1 个答案:

答案 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的析构函数将无法获取调用。