How to appropriately destroy mxArray created by ocvMxArrayFromImage_{DataType} functions
이전 댓글 표시
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
James Tursa
2018년 3월 28일
편집: James Tursa
2018년 3월 28일
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
2018년 3월 29일
편집: Eddie Chiou
2018년 3월 29일
Eddie Chiou
2018년 3월 29일
James Tursa
2018년 3월 29일
I can't offer any advice unless I see your code.
Eddie Chiou
2018년 3월 29일
James Tursa
2018년 3월 29일
Is channels always either going to be 1 or 3?
Eddie Chiou
2018년 3월 29일
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 OpenCV Support에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!