How to appropriately destroy mxArray created by ocvMxArrayFromImage_{DataType} functions
Show older comments
Dear all, I am trying to integrate Matlab code into C++ program with OpenCV. I found the program will gradually increase memory usage.
After some working around, I believe the problem has something to do with destroying mxArray. I wrote a simple test program with an infinite loop that keeps create mxArray and destroy it, as shown below
cv::Mat imageMat = cv::imread(imagePath);
while(true)
{
mxArray* imageMXA = ocvMxArrayFromImage_uint8(imageMat);
mxDestroyArray(imageMXA);
}
this program will gradually increase memory usage.
However, another test program that creates mxArray with mxCreateNumericArray does not have such problem. the code is shown below
while(true)
{
mxArray* imageMXA = mxCreateNumericArray(dimensionNumber, dimensions, mxDOUBLE_CLASS, mxREAL);
mxDestroyArray(imageMXA);
}
It seems that there is something wrong in the code that destroy the mxArray created by ocvMxArrayFromImage_{DataType} functions. My question is, how should I appropriately destroy such mxArray?
7 Comments
James Tursa
on 28 Mar 2018
Edited: James Tursa
on 28 Mar 2018
You would probably need to see the code for ocvMxArrayFromImage_uint8 to answer your question, and you don't have that. However, it looks like it is a simple nD transpose and reordering operation, so it wouldn't be too difficult to write your own conversion routine if needed.
Eddie Chiou
on 29 Mar 2018
Edited: Eddie Chiou
on 29 Mar 2018
Eddie Chiou
on 29 Mar 2018
James Tursa
on 29 Mar 2018
I can't offer any advice unless I see your code.
Eddie Chiou
on 29 Mar 2018
James Tursa
on 29 Mar 2018
Is channels always either going to be 1 or 3?
Eddie Chiou
on 29 Mar 2018
Answers (0)
Categories
Find more on OpenCV Support in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!