gpt4 book ai didi

c++ - 在 std::vector 中释放 Mat

转载 作者:太空狗 更新时间:2023-10-29 20:06:48 25 4
gpt4 key购买 nike

使用 OpenCV 2.2,我正在尝试通过调用释放到 Mat 图像来释放内存在 std::vector 中,例如:

std::vector < Mat > matVec;

不过,好像是

for (int k = 0; k < matVec.size(); k++)
{

matVec[k].release();

}

没有释放任何内存(尽管它仍然可以编译)。

我知道 OpenCV 2.2 中有新的内存管理,但我没发现问题。

IplImage* 类型代替 Mat 的类似示例(使用 cvReleaseImage() 而不是 Mat 成员函数 .release())工作得很好。

有什么提示吗?

最佳答案

.release() 只应在特殊情况下调用,不适合日常使用。只需清除 vector :

std::vector<cv::Mat>().swap(matVec);

这会调用每个 Mat 的析构函数,释放内存(如果没有其他 cv::Mat 指向它 - 记住 cv::MatIplImage 不同,它是一种引用计数数据类型。如果它在其他地方被引用,您也必须清除该引用)。如果你想保留 vector ,但去掉其中的内容,请将代码中的 .release() 行替换为:

matVec[k] = cv::Mat();

关于c++ - 在 std::vector 中释放 Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092062/

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