如何?:将cv::Mat定义为类成员,然后在源代码文件中对其进行修改



我定义了一个类,它有一个cv::Mat数据成员。然后在类方法中,我希望以某种方式修改这个矩阵(更改值、添加行/列等)。

然而,我一直收到一个Segmentation Fault错误(我将把错误放在底部)。

我考虑过使用cv::Mat&reference而不是cv::Mat作为类的数据成员,但随后它变得"混乱",因为它们必须初始化。

我怀疑我必须以某种方式使用智能指针,但我的背景更多地是C而不是C++。

如果有人能一步一步地解释,我将不胜感激。谢谢。

//Header file
class A
{
     public:
         A();
         void do_something();
     private:
         cv::Mat data;
}
//Source code file
#include "A.h"
A::A():data(cv::Mat()){}
void A::do_something()
{
   cv::Mat tmp(2,2,CV_32FC1, cv::Scalar(6));
   data = tmp;
   //also other mehtods fail like
   //data = tmp.clone();
   //data.push_back(2);
}

我得到的分段故障错误:

  • 当使用数据=(对某些其他矩阵)

    程序接收到信号SIGSEGV,分段故障。在
    的cv::Mat::release(this=0x0)中0x00000000004051cc/opt/ros/hydro/include/opencv2/core/mat.hpp:366如果(refcount&CV_XADD(refcount,-1)==1)

  • 当我使用例如:data.push_back(value)时

    程序接收到信号SIGSEGV,分段故障。在cv::Mat::push_back中0x00000000004056cf(this=0x0,elem=@0x7fffffdb2c:6)/opt/ros/hydro/include/opencv2/core/mat.hpp:684如果(!data)

首先,感谢所有回复者的帮助;他们不知怎么地让我注意到了自己的错误。还有道歉,因为这太愚蠢了。

问题是,在test.cpp的主函数中,我声明了一个指向类a的指针,但我没有用"new"命令初始化它。所以我想数据cv::Mat没有正确初始化,导致了分段故障。

//test.cpp
#include "A.h" 
int main()
{
    A* a;
    //a = new A(); //this line was missing in my program
    a->do_something();
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新