gpt4 book ai didi

c++ - 释放返回值/指向 CvMat 的指针的内存

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:30 32 4
gpt4 key购买 nike

我在使用 OpenCV 释放内存时遇到了问题。如何释放返回指针的内存?

这是我的代码:

这是我调用函数细化的函数:

int preprocessing_and_classification() { 

/// Section 2D - Perform morphological processing

CvMat* image1_edge_morpho = thinning(image1_edge);
.......
.......
...........

//////////////// release the memory ///////////////
cvReleaseImage(&img);
cvReleaseMat(&image1);
cvReleaseMat(&image1_edge);
cvReleaseMat(&image1_edge_morpho);
cvReleaseImage(&imgg);
cvReleaseImage(&imggT);
cvReleaseMemStorage(&g_storage);
cvReleaseMat(&features);
cvReleaseMat(&labels_obtained);
/////////////////////////////////////////////////////
return num_bacilli;

}

您可以在下面看到的细化函数返回指针 Merode:

CvMat* thinning(CvMat* M){ 

/*
Input parameters
CvMat* M = Pointer to the matrix on which morphological processing needs to be done.

Output parameters
CvMat* Merode = Pointer to morphological processed matrix.
*/



CvMat* Merode = cvCreateMat(h,w,CV_8UC1);
.
.
.
.
.
.



///// Releasing the images, matrices and structuring elements to free memroy.
// Matrix Merode is not released as it is the output of this function file
cvReleaseStructuringElement(&B);
cvReleaseMat( &Mopen );
cvReleaseMat( &temp );
cvReleaseMat( &Mclose );
cvReleaseMat( &temp1 );
cvReleaseMat( &MM );
cvReleaseImage( &img1 );
cvReleaseMemStorage(&g_storage);
cvReleaseMat( &Mimg1 );
cvReleaseMat( &Mimg2 );


return Merode;
}

如何删除 Merode?

最佳答案

如果允许您更改 thinning您可以使用的功能 cv::Mat cv::Ptr<cvMat> (甚至是带有自定义删除器的 std::unieue_ptrstd::shared_ptr - 如果是 c++11 兼容的编译器)

如果不允许更改代码,则应在使用该方法的任何位置删除返回指针。最简单的方法是用 cv::Ptr<> 包裹指针.

关于c++ - 释放返回值/指向 CvMat 的指针的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544095/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com