将Mat传递给CvMat *分段错误

时间:2013-05-14 14:46:25

标签: opencv segmentation-fault mat

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

所以我有类似下面的内容,并希望将其传递给变量Si ;;

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

但这给出了分段错误,我做错了吗?

2 个答案:

答案 0 :(得分:0)

使用

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

首先初始化Si以将S复制到Si

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

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

不要忘记稍后使用delete Si;

答案 1 :(得分:0)

您需要为指针引用的对象分配存储空间。这可以通过调用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;