【发布时间】: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
我想将值传递给指针变量,即从Mat类型到CvMat*?
所以我有类似下面的内容并想将它传递给变量 Si;;
Mat S=(Mat_<double>(1, 3) << 1,0,1 );
CvMat* Si;
*Si=S;
但这会导致分段错误,我做错了吗?
【问题讨论】:
标签: opencv segmentation-fault mat
使用
Si = &S如果你想改变指针。
或者先初始化Si,把S复制到Si中
Si = new Mat_<double>(1, 3);
*Si = S;
基本上在初始化 Si 之前,它是一个无效指针,并且假设您要将结构复制到指针所指的任何地址,这是一个无效操作。您需要“拥有”一个有效的内存地址(new 操作为您创建)才能处理对象。
别忘了稍后使用delete Si;。
【讨论】:
您需要为指针引用的对象分配存储空间。这可以通过调用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;
【讨论】: