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



我有 n 张图片,在 opencv 操作后,每个图片都有自己的 mat 文件。我尝试将其保持在结构阵列中。我的结构如下:

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

我可以计算垫子温度,然后尝试在_img_info中处理其内容,但是我得到了分段错误。我的转储代码是这样的:

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 fg2(2,3,CV_32F,2);

你可能预料到,Mat 会用 Scalar(2) 初始化,但它将 2 作为指向外部数据的(不存在的)指针;( [可能是克隆(),而不是赋值,因此崩溃了]

而是使用 :

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()

另外,由于您的结构包含 C++/RAII 对象,请不要使用 malloc/free ,而是使用 new/delete,否则不会调用 Mat 的析构函数。

最新更新