之前看到过说opencv做了完善的内存管理机制,因此在使用opencv时不用手动释放内存,但是今天使用的时候还是产生了内存泄漏,代码的功能是循环读取图片,做颜色转换,然后做其他操作,代码如下:
for(xxx){
cv::Mat bgr = cv::imread(xxx);
cv::Mat rgb;
cv::cvtColor(bgr,rgb,cv::COLOR_RGB2BGR);
xxxx
xxxx
xxxx
}
这样就产生了内存泄漏,bgr的内存可以正常释放,但是rgb的不可以,解决办法,定义rgb的时候给初始值,如下:
for(xxx){
cv::Mat bgr = cv::imread(xxx);
cv::Mat rgb = bgr.clone();
cv::cvtColor(bgr,rgb,cv::COLOR_RGB2BGR);
xxxx
xxxx
xxxx
}