[英]OpenCV cv::imwrite causes memory leak
I'm writing some OpenCV code to write any cv::Mat
(s) in a queue to a file. 我正在编写一些OpenCV代码,以将队列中的所有cv::Mat
(s)写入文件。 Unfortunately, the calls to cv::imread
seem to be causing a memory leak. 不幸的是,对cv::imread
的调用似乎导致了内存泄漏。 When those lines are commented out, no memory leak occurs. 当这些行被注释掉时,不会发生内存泄漏。
void ck::file_pipe_handler() {
std::vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(0);
while (true) {
std::unique_lock<std::mutex> pop_lock(
file_pipe_mutex, std::defer_lock);
if (file_pipe.empty()) {
usleep(10);
continue;
}
pop_lock.lock();
frame_details frame_deets = file_pipe.front();
file_pipe.pop();
pop_lock.unlock();
auto base_dir = output_file_name + "/" + frame_deets.serial_number;
auto rgb_reg_dir = base_dir + "/rgb_registered/";
auto rgb_raw_dir = base_dir + "/rgb_raw/";
auto depth_dir = base_dir + "/depth/";
// If you comment out the imwrite calls here,
// the memory leak does not occur
if (register_rgb)
cv::imwrite(rgb_reg_dir + std::to_string(frame_deets.timestamp_rgb)
+ ".png", frame_deets.frame_registered.first);
cv::imwrite(rgb_raw_dir + std::to_string(frame_deets.timestamp_rgb)
+ ".png", frame_deets.raw_rgb);
cv::imwrite(depth_dir + std::to_string(frame_deets.timestamp_depth)
+ ".png", frame_deets.frame_registered.second, compression_params);
frame_deets.raw_rgb.release();
frame_deets.frame_registered.first.release();
frame_deets.frame_registered.second.release();
}
}
I added the release calls to the end just to make sure that the cv::Mat
(s) are correctly freed. 我将发布调用添加到最后,以确保正确释放了cv::Mat
。 Also I'm certain that the queue isn't filling up. 另外,我敢肯定队列没有填满。 I'm using OpenCV 3.1. 我正在使用OpenCV 3.1。
并发问题-只需在cv :: imwrite调用后移动解锁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.