title: Freeing memory allocation in openCV
body: <p>I am trying to implement computer vision algorithm on my NVidia GPU with openCV. I am using openCV 2.4 and I am currently writing very simple programs to get accustomed to openCV. I wrote a simple code of transposing a matrix and also to implementing canny edge detection on GPU. The program is running perfectly but I need to deallocate the memory in both the CPU and GPU. So I am posting my code below :</p>
  
  <pre><code>int main(int argc,char *argv[])
  {
    int k;
    cv::Mat src;
    cv::Mat dest;
    cv::Mat dest_1;
    cv::gpu::GpuMat im_source;
    cv::gpu::GpuMat im_dest;
    cv::gpu::GpuMat im_dest_1;
    cv::gpu::Stream::Null;
  
    k = cv::gpu :: getCudaEnabledDeviceCount();
    printf("%d\n",k);
  
    src = cv::imread("lena.jpg",0);
    cv::imshow("lena_org",src);
    im_source.upload(src);
  
    cv::gpu::transpose(im_source,im_dest);
  
     im_dest.download(dest);
  
     cv::imshow("lena_trans",dest);
  
     cv::gpu::Canny(im_source,im_dest_1,100,100,3,false);
  
     im_dest_1.download(dest_1);
     cv::imshow("lena_edge",dest_1);
     cv::waitKey();
  
  } 
  </code></pre>
  
  <p>So from the code above I believe the memory is not getting freed in both the CPU and GPU. I was searching the internet a bit and I came across with cv::Mat::Release for cpu and cv::gpu::GpuMat::Release for the GPU side. But I am not getting how to use them or how I should use this functions in my code so that I could free bot my CPU and GPU memories. It would be very much helpful if someone could guide me through correct usage of the Release apis so that I could free the memory successfully. Thanks for all your support.  </p>