【问题标题】:pass Mat to CvMat* segmentation fault将 Mat 传递给 CvMat* 分段错误
【发布时间】:2013-05-15 00:15:57
【问题描述】:

我想将值传递给指针变量,即从Mat类型到CvMat*?

所以我有类似下面的内容并想将它传递给变量 Si;;

Mat S=(Mat_<double>(1, 3) << 1,0,1 );
CvMat* Si;
*Si=S;

但这会导致分段错误,我做错了吗?

【问题讨论】:

    标签: opencv segmentation-fault mat


    【解决方案1】:

    使用

    Si = &amp;S如果你想改变指针。

    或者先初始化Si,把S复制到Si中

    Si = new Mat_<double>(1, 3);
    *Si = S;
    

    基本上在初始化 Si 之前,它是一个无效指针,并且假设您要将结构复制到指针所指的任何地址,这是一个无效操作。您需要“拥有”一个有效的内存地址(new 操作为您创建)才能处理对象。

    别忘了稍后使用delete Si;

    【讨论】:

    • 您的示例无法编译。
    • 我用 cvCreateMat(1,3,CV_32F) 初始化了 Si,现在它可以工作了,谢谢。
    【解决方案2】:

    您需要为指针引用的对象分配存储空间。这可以通过调用cvCreateMat()来完成,如下:

    cv::Mat S=(cv::Mat_<double>(1, 3) << 1,0,1 );
    CvMat* Si = cvCreateMat(1, 3, CV_64FC1);
    *Si=S;
    

    请注意,此方法会将数据从S 复制到Si。如果您只想创建CvMat 标头而不复制数据,请执行以下操作:

    cv::Mat S=(cv::Mat_<double>(1, 3) << 1,0,1 );
    CvMat m = S;
    CvMat* Si = &m;
    

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 2016-12-20
      • 1970-01-01
      • 2021-11-12
      相关资源
      最近更新 更多