Opencv 将Mat传递到CvMat*分段故障

Opencv 将Mat传递到CvMat*分段故障,opencv,segmentation-fault,mat,Opencv,Segmentation Fault,Mat,我想把一个值传递给指针变量,即从Mat类型传递到CvMat* 因此,我有如下内容,希望将其传递给变量Si Mat S=(Mat_<double>(1, 3) << 1,0,1 ); CvMat* Si; *Si=S; mats=(Mat_u1;(1,3)使用 Si=&S如果要更改指针 或者先初始化Si以将S复制到Si中 Si = new Mat_<double>(1, 3); *Si = S; Si=新材料(1,3); *Si=S; 基本上,在初始化Si

我想把一个值传递给指针变量,即从Mat类型传递到CvMat*

因此,我有如下内容,希望将其传递给变量Si

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

Si=&S
如果要更改指针

或者先初始化Si以将S复制到Si中

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


以后不要忘记使用
delete Si;

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

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

您的示例没有编译。我用cvCreateMat(1,3,CV_32F)初始化了Si,现在它工作了,谢谢。
cv::Mat S=(cv::Mat_<double>(1, 3) << 1,0,1 );
CvMat m = S;
CvMat* Si = &m;