【问题标题】:OpenCV cv::imwrite causes memory leakOpenCV cv::imwrite 导致内存泄漏
【发布时间】:2016-10-02 18:24:15
【问题描述】:

我正在编写一些 OpenCV 代码来将队列中的任何 cv::Mat(s) 写入文件。不幸的是,对cv::imread 的调用似乎导致了内存泄漏。当这些行被注释掉时,不会发生内存泄漏。

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();
    }
}

我将发布调用添加到末尾只是为了确保正确释放 cv::Mat(s)。此外,我确定队列没有填满。我正在使用 OpenCV 3.1。

【问题讨论】:

    标签: c++ opencv memory-leaks queue mutex


    【解决方案1】:

    并发问题 - 只需在 cv::imwrite 调用之后移动解锁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2015-07-06
      • 2014-06-07
      • 2013-11-20
      • 2011-10-28
      • 2016-01-18
      相关资源
      最近更新 更多