从函数返回矩阵的正确方法

时间:2011-08-02 23:00:14

标签: c opencv

我有一个计算和“创建”矩阵的函数。我的函数在内联时运行良好,但是当我尝试将代码放入函数时,我无法返回结果矩阵。

我希望我的函数调用如下:

CvMat projectionResult;
project_on_subspace(&projectionResult);
cvShowImage("test", &projectionResult );

(最终使用*CvMat代替`CvMat)

我做的是以下内容:

void project_on_subspace(CvMat * source)
{
source = cvCreateMat( feature_positions[feature_number].height, feature_positions[feature_number].width, CV_32FC1 );    

//some more code
}

但是cvCreateMa t函数会改变源指针的值,所以当我从函数返回时,projectionResult矩阵没有被初始化。

我知道这是一个非常简单的问题,但我真的不明白如何使这项工作? 是否可以在不更改函数原型的情况下执行此操作,还是需要将其更改为**CvMat而不是*CvMat

编辑:我更喜欢在参数指针中返回我的结果,而不是使用“return”语句,但两者都没问题。

2 个答案:

答案 0 :(得分:0)

CvMat * source表示您无法更改source指向的地址,但可以更改source的内容。 (请注意,您可以更改它,它不会为调用者更改)。如果您需要能够更改source指向的位置,则需要添加另一个间接级别CvMat ** source,这样您就可以更改*source并使其影响调用方法。

答案 1 :(得分:0)

改为执行此操作(假设cvCreateMat未返回指向cvCreateMat的指针):

void project_on_subspace(cvMat **source)
{
    *source = cvCreateMat(etc...);
    // etc...

并称之为:

CvMat *projectionResult;
project_on_surface(&projectionResult);

不要忘记在适当的时候释放projectionResult。