我想将值传递给指针变量,即从Mat类型到CvMat *?
所以我有类似下面的内容,并希望将其传递给变量Si ;;
Mat S=(Mat_<double>(1, 3) << 1,0,1 );
CvMat* Si;
*Si=S;
但这给出了分段错误,我做错了吗?
答案 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;