Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why so many functions in OPENCV use InputArray and OutputArray as function arguments?

Tags:

c++

opencv

Many functions in OPENCV are using InputArray and OutputArray as function arguments. For example, the Hough transform function in OPENCV:

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )

Insider the function, we have to use InputArray function getMat to give it to a true input array type. For example, Mat image= _image.getMat(). Similarly, we have to use copyTo function to transform the true output array to OutputArray format. For example, Mat(lines).copyTo(_lines).

My question is why OPENCV designs its function signature in this way. Take the hough function for example, if we use the following function signature:

void HoughLines(Mat &image, std::vector<Vec2f> &lines, double rho, double theta, int threshold, double srn=0, double stn=0 )

I expect that it would be better as by doing so it will eliminate additional unnecessary copy operations.

like image 985
feelfree Avatar asked Mar 13 '23 06:03

feelfree


1 Answers

From (http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html?highlight=inputarray#InputArray)

When you see in the reference manual or in OpenCV source code a function that takes InputArray, it means that you can actually pass Mat, Matx, vector etc. (see above the complete list).

The cv Arrays are only proxy classes. You can use cv::Mat variables as Input/Output-Arrays (and you don't have to wrap them yourself).

like image 72
Lks Avatar answered Mar 30 '23 00:03

Lks