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.
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With