1

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

所以我有类似下面的东西,想把它传递给变量 Si;;

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

但这会导致分段错误,我做错了吗?

4

2 回答 2

0

利用

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

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

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

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

不要忘记delete Si;在以后的某个时候使用。

于 2013-05-14T15:50:51.310 回答
0

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

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

请注意,这种方法会将数据从复制SSi. 如果您只想创建CvMat标头而不复制数据,请执行以下操作:

cv::Mat S=(cv::Mat_<double>(1, 3) << 1,0,1 );
CvMat m = S;
CvMat* Si = &m;
于 2013-05-14T16:15:57.577 回答