别再用apt提供的OpenCV了:ubuntu16.04下,有内存泄漏

ubuntu16.04系统下,用apt装的opencv,存在内存泄漏。自己写的程序用到了opencv,为了避免误解自己的代码有没释放的内存,建议换用新版本,例如opencv3.4.5(自行编译)。

sudo apt install libopencv-dev安装的opencv

调用OpenCV的C接口,最基本的函数CvShowImage()

利用valgrind检查内存泄漏情况

测试代码如下:

//main.c
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"

#include <stdio.h>

int main(){
    const char* filename = "cat.jpg";
    IplImage* im = cvLoadImage(filename, -1);
    cvShowImage(filename, im);
    cvWaitKey(0);
    cvReleaseImage(&im);

    return 0;
}

图片:

编译:

gcc main.c -O0 -g `pkg-config --cflags opencv` `pkg-config --libs opencv` -lm

检查内存泄漏:

valgrind --leak-check=full  ./a.out

输出:

==3130== 518,444 bytes in 1 blocks are possibly lost in loss record 6,011 of 6,011
==3130==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3130==    by 0x4F1A92D: cv::fastMalloc(unsigned long) (in /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9)
==3130==    by 0x4EB4F74: cvCreateData (in /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9)
==3130==    by 0x4EB5070: cvCreateMat (in /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9)
==3130==    by 0x528C9F7: cvImageWidgetSetImage(_CvImageWidget*, void const*) (in /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9)
==3130==    by 0x528E51B: cvShowImage (in /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9)
==3130==    by 0x402102: main (main.c:9)
==3130==
==3130== LEAK SUMMARY:
==3130==    definitely lost: 0 bytes in 0 blocks
==3130==    indirectly lost: 0 bytes in 0 blocks
==3130==      possibly lost: 522,276 bytes in 31 blocks
==3130==    still reachable: 965,240 bytes in 10,496 blocks
==3130==                       of which reachable via heuristic:
==3130==                         length64           : 6,240 bytes in 96 blocks
==3130==                         newarray           : 1,968 bytes in 43 blocks
==3130==         suppressed: 0 bytes in 0 blocks
==3130== Reachable blocks (those to which a pointer was found) are not shown.
==3130== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==3130==
==3130== For counts of detected and suppressed errors, rerun with: -v
==3130== ERROR SUMMARY: 31 errors from 31 contexts (suppressed: 0 from 0)

查看apt装的opencv版本信息:

? apt-cache show libopencv-dev
Package: libopencv-dev
Architecture: amd64
Version: 2.4.9.1+dfsg-1.5ubuntu1.1
Priority: optional
Section: universe/libdevel
Source: opencv
Origin: Ubuntu
Maintainer: Kubuntu Developers <[email protected]>
Original-Maintainer: Debian Science Team <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 658
Depends: libc6 (>= 2.14), libgcc1 (>= 1:3.0), libopencv-calib3d2.4v5, libopencv-core2.4v5, libopencv-highgui2.4v5, libopencv-imgproc2.4v5, libopencv-ml2.4v5, libopencv-objdetect2.4v5, libstdc++6 (>= 5.2), libopencv-core-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-ml-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-imgproc-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-video-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-objdetect-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-highgui-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-calib3d-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-flann-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-features2d-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-legacy-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-contrib-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-ts-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-photo-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-videostab-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-stitching-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-gpu-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-superres-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv-ocl-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv2.4-java (= 2.4.9.1+dfsg-1.5ubuntu1.1), libopencv2.4-jni (= 2.4.9.1+dfsg-1.5ubuntu1.1), libcv-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libhighgui-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), libcvaux-dev (= 2.4.9.1+dfsg-1.5ubuntu1.1), pkg-config
Recommends: opencv-data
Breaks: libopencv-core-dev (<= 2.3.1-8)
Filename: pool/universe/o/opencv/libopencv-dev_2.4.9.1+dfsg-1.5ubuntu1.1_amd64.deb
Size: 168514
MD5sum: b5fdea625c74f48de673eaad968989ca
SHA1: 5bc883be2cdf8f18121076c311e2ec3035aad77f
SHA256: 19fd5d0e2d9ea50f4990c193409c651896031266cd069789b7f9cec7fbd74a1f
Homepage: http://opencv.org/
Description-en: development files for opencv
 This is a metapackage providing development package necessary for
 development of OpenCV (Open Computer Vision).
 .
 The Open Computer Vision Library is a collection of algorithms and sample
 code for various computer vision problems. The library is compatible with
 IPL (Intel's Image Processing Library) and, if available, can use IPP
 (Intel's Integrated Performance Primitives) for better performance.
 .
 OpenCV provides low level portable data types and operators, and a set
 of high level functionalities for video acquisition, image processing and
 analysis, structural analysis, motion analysis and object tracking, object
 recognition, camera calibration and 3D reconstruction.
Description-md5: f9dc67381f1013c39fe59842c79cbddf
Supported: 5y

Package: libopencv-dev
Priority: optional
Section: universe/libdevel
Installed-Size: 657
Maintainer: Kubuntu Developers <[email protected]>
Original-Maintainer: Debian Science Team <[email protected]>
Architecture: amd64
Source: opencv
Version: 2.4.9.1+dfsg-1.5ubuntu1
Depends: libc6 (>= 2.14), libgcc1 (>= 1:3.0), libopencv-calib3d2.4v5, libopencv-core2.4v5, libopencv-highgui2.4v5, libopencv-imgproc2.4v5, libopencv-ml2.4v5, libopencv-objdetect2.4v5, libstdc++6 (>= 5.2), libopencv-core-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-ml-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-imgproc-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-video-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-objdetect-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-highgui-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-calib3d-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-flann-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-features2d-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-legacy-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-contrib-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-ts-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-photo-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-videostab-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-stitching-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-gpu-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-superres-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv-ocl-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv2.4-java (= 2.4.9.1+dfsg-1.5ubuntu1), libopencv2.4-jni (= 2.4.9.1+dfsg-1.5ubuntu1), libcv-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libhighgui-dev (= 2.4.9.1+dfsg-1.5ubuntu1), libcvaux-dev (= 2.4.9.1+dfsg-1.5ubuntu1), pkg-config
Recommends: opencv-data
Breaks: libopencv-core-dev (<= 2.3.1-8)
Filename: pool/universe/o/opencv/libopencv-dev_2.4.9.1+dfsg-1.5ubuntu1_amd64.deb
Size: 168612
MD5sum: ab6f095040684dba7c59452293d76733
SHA1: 639f0eb5434c9e58cd6dc7d463cf3678ebe0ec6b
SHA256: 298ea7a4d354317df60b0cb9bfd0aa2c090c93743c3e178564f709f3226e0cb0
Description-en: development files for opencv
 This is a metapackage providing development package necessary for
 development of OpenCV (Open Computer Vision).
 .
 The Open Computer Vision Library is a collection of algorithms and sample
 code for various computer vision problems. The library is compatible with
 IPL (Intel's Image Processing Library) and, if available, can use IPP
 (Intel's Integrated Performance Primitives) for better performance.
 .
 OpenCV provides low level portable data types and operators, and a set
 of high level functionalities for video acquisition, image processing and
 analysis, structural analysis, motion analysis and object tracking, object
 recognition, camera calibration and 3D reconstruction.
Description-md5: f9dc67381f1013c39fe59842c79cbddf
Homepage: http://opencv.org/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Supported: 9m

原文地址:https://www.cnblogs.com/zjutzz/p/11619471.html

时间: 2024-08-29 20:37:38

别再用apt提供的OpenCV了:ubuntu16.04下,有内存泄漏的相关文章

ubuntu16.04下基于Python的OpenCV的安装

这几天一直在学习基于Python的OpenCV ,开发环境是在Ubuntu16.04下,学习的心得就是基于Python的OpenCV开发基本上就属于函数式编程了,OpenCV提供了大多数的功能函数,以及大多数的算法封装,并不需要从头开发,不需要重复的造轮子,需要的仅仅是将各个零部件进行组装.所以学习起来相对容易一些.但是这是建立在对于Python有一定的基础上的.首先是OpenCV的安装,本文以OpenCV3.4.1的安装为例, 1.首先去官网下载http://opencv.org/releas

ubuntu16.04下安装opencv出现libgtk2.0-dev配置失败问题解决方法

第一次在ubuntu下安装opencv,遇到很多问题,特别是libgtk2.0-dev总是配置失败的问题,在网上也看到一些解决方法,自己也遇到一些比较奇葩的问题,故整理于此. 网上大部分的解决方案就是更改下载源,我看到一些比较多的命令行更改源的方法,这里分享一下在界面上直接操作的方法: 1.右上角选择系统设置 2.在系统设置中选择软件及更新 3.系统最开始默认的下载服务器是美国服务器,我这里更改为了中国的服务器,也可以选择其他站点. 4.点击其他站点会出现很多服务器选项,国内一般选择阿里云服务器

ubuntu16.04下opencv安装笔记和例程

问题: 最近重装了系统,需要重新配置opencv2.4.13,配置完成后每次都出现cmake error,google了报错,尝试了各种方法,都未解决问题,于是重新git clone 了opencv2.4.9,发现出现了同样的问题和报错. 解决方法: 刚开始没更新版本之前折腾了两天,后来感觉特别没有成就感,便慢慢放下了这件事,开始学习自己的研究生课程,学习枯燥的时候又尝试重新安装了下,终于跑通了例程,贴出例程和测试结果: 测试例程: 新建demo文件夹 新建demo.cpp,把下面代码复制黏贴:

opencv + mfc 引起的内存泄漏

之前一直用win32写opencv 的程序,没有任何内存泄漏,然后改需求,要求用把这个win32的exe做成dll,瞬间麻烦大了,各种内存泄漏,从网上查了一下,大体上是opencv 和mfc的机制不同,导致opencv的内存泄漏,网上给了两种解决方案 1.将mfc改成静态库使用   (程序里面引用opencv的dll,验证没有任何内存泄漏,就算你动态创建了各种指针不释放,最后也不会出现内存泄漏,难道是opencv自己给释放的?) 2.延迟加载dll   (我借用opencv的功能,自己写了个程序

树莓派学习笔记——apt方式安装opencv

0.前言 本文介绍如何在树莓派中通过apt方式安装opencv,并通过一个简单的例子说明如何使用opencv.相比于源代码方式安装opencv,通过apt方式安装过程步骤简单些,消耗的时间也少一些.通过apt方式安装没有自动生成opencv.pc文件,所以在编写makefile文件时不能直接使用pkg-config工具,而需要逐个指定opencv_core.opencv_imgproc等动态链接库. [相关博文] [树莓派学习笔记-- 源代码方式安装opencv] 更多内容请参考--[树莓派学习

ubuntu 14.04 下利用apt-get方式安装opencv

转载,请注明出处:http://blog.csdn.net/tina_ttl 目录(?)[+] 标签(空格分隔): Linux学习 OpenCV ubuntu 1404 下利用apt-get方式安装OpenCV 前言 安装方法 opencv被安装在了哪里 1 opencv的安装源文件 2 opencv相关的头文件的安装位置 3 opencv的相关动态链接库的安装位置 4 linux下的opencv和windows下的opencv文件 测试代码 1 源码 2 make 3 测试程序 1.前言 相比

Ubuntu16.04安装tensorflow+安装opencv+安装openslide+安装搜狗输入法

Ubuntu16.04在cuda以及cudnn安装好之后,安装tensorflow,tensorflow以及opencv可以到网上下载对应的安装包并且直接在安装包所在的路径下直接通过pip与conda进行安装,如下图所示: 前提是要下载好安装包.安装好tensorflow之后还需要进行在~/.bashrc文件中添加系统路径,如下图所示 Openslide是医学图像一个重要的库,这里给出三条命令进行安装 sudo apt-get install openslide-tools sudo apt-g

SysInternals提供了一个工具RamMap,可以查看内存的具体使用情况

SysInternals提供了一个工具RamMap,可以查看内存的具体使用情况.如果发现是Paged Pool和Nonpaged Pool占用过大,可以用另一个工具poolmon来查看占用内存的驱动Tag是什么,然后再用Tag找到对应的驱动,可以尝试更新驱动,或者用Autoruns禁止其启动. 微软应该不会那么SB,专门开发一个拖累系统的功能吧……可能是某个后台服务/驱动有Bug导致内存占用异常.以前还碰到过迅雷的XLServicePlatform服务占用超大(数GB)内存的现象,可能是因为这个

Ubuntu16.04安装opencv for python/c++

Ubuntu16.04安装opencv for python/c++ 网上关于opencv的安装已经有了不少资料,但是没有一篇资料能让我一次性安装成功,因此花费了大量时间去解决各种意外,希望这篇能给一些人带去便利,节省时间. 1.安装OpenCV所需的库 1 sudo apt-get install build-essential 2 sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavforma