在函数中使用相同的变量作为输入/输出

时间:2013-03-14 17:19:29

标签: c++ qt opencv

我正在编写一个与OpenCV结合的Qt GUI程序来创建人员跟踪应用程序。 OpenCV有很多以矩阵作为输入和输出的函数,例如颜色转换:

  

cvtColor(inputArray src,outputArray dst,int code,int dstCn = 0);

Mat是OpenCV的默认矩阵类,假设我有一个名为frame的Mat对象,我会实现这样的函数来改变它的属性:

  

cvtColor(frame,frame,CV_RGB2HSV,0);

在任何函数上使用相同的变量作为输入和输出是否有任何缺点?或者我应该先创建一个副本?

或者我应该查看每个功能文档?

2 个答案:

答案 0 :(得分:0)

我认为这是个人选择。以下是一些个人样本:

获取只读输入,对输出的引用,并在处理输入后将其推送到输出。可选的错误结果友好。

bool function(const type& input, type& output){
    output = input;
    return true;
}

获取只读输入,将其分配给输出,更改输出并将其返回(C ++ 11移动优化)。

type function(const type& input){
    type output = input;
    return output;
}
type output = function(input);

在这里,您强制将对象的新副本作为参数,并且可以使用它并将其返回(当您不想更改副本时,最好使用C ++ 11)。 See also: Want speed, pass by value.

type function(type input){
    // modify input
    return input;
}
type output = function(input);
  1. 在同一个参数中输入和输出。谨慎使用。可以返回错误。

    bool函数(类型& put){     返回true; }

  2. 这取决于您的设计。不需要错误?...使用可移动的错误?需要错误?...使用一个让您可以访问返回值的错误。或者,只需遵循现有的做法,但要知道每个人可以如何帮助或惩罚您的表现

    // this makes a pointless copy for the input (use const ref here)
    bool function(type input, type& output){
        output = input;
        return true;
    }
    

    (正确的方法)

    bool function(const type& input, type& output){
        output = input;
        return true;
    }
    

    PS :自学C ++开发者的个人观点:))

答案 1 :(得分:0)

这是个人选择。如果您以后不需要输入图像,那么一定要这样做。 我已经尝试过了,它大部分时间都有效,但有些时候效果很差。 这取决于你正在使用的功能。