我想将值传递给指针变量,即从 Mat 类型到 CvMat*?
所以我有类似下面的东西,想把它传递给变量 Si;;
Mat S=(Mat_<double>(1, 3) << 1,0,1 );
CvMat* Si;
*Si=S;
但这会导致分段错误,我做错了吗?
我想将值传递给指针变量,即从 Mat 类型到 CvMat*?
所以我有类似下面的东西,想把它传递给变量 Si;;
Mat S=(Mat_<double>(1, 3) << 1,0,1 );
CvMat* Si;
*Si=S;
但这会导致分段错误,我做错了吗?
利用
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;