Most of the time, OpenCV automatically allocates memory for the output data (parameter of the method) in the OpenCV method, so if a method's arguments have one or more input arrays (Cv::mat instances) and some output arrays, OpenCV automatically allocates memory space for the output array or allocates memory space, and the size and data type of the memory are determined by the input array. This method, if needed, determines the other properties of the output array by other parameters.
Here's a piece of code to illustrate:
1#include"cv.h"2#include"highgui.h"3 4 using namespaceCV;5 6 intMainint,Char**)7 {8Videocapture Cap (0);9 if(!cap.isopened ())Ten { One return-1; A } - Mat frame, edges; -Namedwindow ("edges",1); the for(;;) - { -Cap >>frame; - Cvtcolor (frame, edges, cv_bgr2gray); +Gaussianblur (edges, edges, Size (7,7),1.5,1.5); -Canny (edges, edges,0, -,3); +Imshow ("edges", edges); A if(Waitkey ( -) >=0) at { - Break; - } - } - return 0; -}
>> will automatically allocate memory space for the array frame because the video Analysis Module Videocapture component has been able to obtain the resolution and bit depth information of the USB camera. While the Cvtcolor method automatically allocates memory for the edges array, the data information for the edges array is the same as the input array, and Cv_bgr2gray determines the color space type of the output image. In the above loop, edges's memory is only allocated once, and if the resolution of the input image changes, the memory is reassigned once. The key function of memory allocation is completed in Mat::create, it is responsible for obtaining the information required by the data, if edges size,depth and other data have, and do not need to change the Ceate method will not do anything, unless, The previously allocated memory space is freed (when released, you need to subtract the pointer counter by 1 and compare it with 0), freeing it to reallocate a memory space that fits your needs. Most of the methods in OpenCV call the Create method (if the mat is used), so the output array is allocated space.
There are also some that do not automatically allocate memory for the output array, such as Cv::mixchannels, Cv::rng::fill, etc., so you need to manually allocate memory space in advance.
OpenCV 2.4.9 Learning Note (3)--OPENCV automatically allocates memory for an output array (matrix)