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.