题目不知道怎么取,因为cvtColor并没有产生内存泄漏,但是我由于没有正确使用cvtColor而出现了内存泄漏的问题,所以暂且以cvtColor+内存泄漏为题

1.应用背景

项目中用到cvtColor的地方是需要将灰度图转为3通道的彩色图(实际上转换后仍然为灰色的,但是电脑认为的是3通道的彩色图了)

因此需要用到以下语句

cvtColor(src_img, cvMtxRGB, CV_GRAY2RGB);

2.出现问题

在循环读取视频帧的时候以下代码出现了内存泄漏

cv::Mat src_img;

cv::Mat cvMtxRGB = cvCreateMat(src_img.rows, src_img.cols, CV_8UC3);

cvtColor(src_img, cvMtxRGB, CV_GRAY2RGB);

3.解决问题

首先发现 cv::Mat src_img,cvMtxRGB ;没有释放,但是opencv2.0中 cv::Mat 是自动释放的,不需要自己释放

然后 cvtColor(src_img, cvMtxRGB, CV_GRAY2RGB);猜测是CV_GRAY2RGB 产生了问题,遂有了自己实现这个函数的想法,但是一般来说cvtColor 这么多版本了不会出现什么问题的,知道看到了博文http://blog.csdn.net/spw_1201/article/details/53515268

内存管理强大高效同时还为用户减少了额外输入。这意味着通常不需要显式分配输出数组。也就是说,可以不写成:

Mat color;

...

Mat gray(color.rows, color.cols,color.depth());

cvtColor(color, gray, CV_BGR2GRAY);

而写成:

Mat color;

...

Mat gray;

cvtColor(color, gray, CV_BGR2GRAY);

因为 cvtColor,与大多数 OpenCV 函数相同,在输出数组时内部调用Mat::create()。

于是将上面代码改为

cv::Mat src_img;

cv::Mat cvMtxRGB;
cvtColor(src_img, cvMtxRGB, CV_GRAY2RGB);

就解决了内存泄漏的问题。

cvtColor +内存泄漏相关推荐

  1. 使用asan检测内存泄漏、堆栈溢出等问题

    一.使用过程 操作过程参考:链接 缘起:程序在移动端崩溃,mac端复现不了,于是在写个崩溃位置函数的调用demo,使用ASAN工具进行排查. 验证过程 1.代码 main.cpp #include & ...

  2. linux如何定位内存泄漏,快速定位内存泄漏的套路(linux)

    快速定位内存泄漏的套路(linux) 快速定位内存泄漏的套路(linux) https://blog.csdn.net/xieyihua1994/article/details/105248362/ ...

  3. [JS] 闭包与内存泄漏

    一句话总结闭包:函数里套函数,函数返回函数. 内存泄漏:每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址.但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删 ...

  4. android释放acitity内存,Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  5. C语言中的指针和内存泄漏

    对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但 ...

  6. 初步判断内存泄漏方法

    有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏. 首先在Java命令行中增加-verbose:gc参数, 然后重新启动java进程. 当系统运行 ...

  7. 野指针与内存泄漏那些事

    野指针:不是NULL指针,是指向垃圾内存的指针 野指针成因: 1.指针变量没有被初始化:指针变量在创建时同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存. 2.指针p被free或者d ...

  8. 介绍两个非常好用的Javascript内存泄漏检测工具

    内存泄漏对开发者来说一般很难检测因为它们是由一些大量代码中的意外的错误引起的,但它在系统内存不足前并不影响程序的功能.这就是为什么会有人在很长时间的测试期中收集应用程序性能指标来测试性能. 最简单的检 ...

  9. 内存溢出和内存泄漏的定义,产生原因以及解决方法(面试经验总结)

    一.定义(概念与区别) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请 了一个integer,但给它存了long才能存 ...

  10. Unix下C程序内存泄漏检测工具Valgrind安装与使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

最新文章

  1. python怎么安装numpy库-Python NumPy库的安装和使用
  2. mysql 排序后 下一条记录_Mysql如何使用order by工作
  3. python configparser模块_Python标准库之ConfigParser模块
  4. 面试精讲之面试考点及大厂真题 - 分布式专栏 01 开篇词:我是怎样带你通过大厂面试
  5. springMVC下载FTP上的文件
  6. 如何在 Linux 中挂载 ISO 文件
  7. 【白皮书分享】人工智能治理白皮书.pdf(附下载链接)
  8. java生成电子发票_Java电子发票管理系统
  9. matlab 普通数值计算,数值计算方法(MATLAB版)
  10. 让你在面试前先写需求的公司是什么公司
  11. markdown 设置目录跳转的简单方法
  12. java成员变量的访问权限_Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围...
  13. 小时候玩的10款经典街机游戏,如今我们都在玩什么?
  14. cmake编译pcl程序时出现‘boost::this_thread::hiden::sleep_until(timespec const)’未定义的引用
  15. java 素数 五行_c语言动态烟花小程序代码
  16. 基于Arduino的草缸自动控制系统
  17. request.setAttribute()
  18. Windows安装Redis5.x
  19. 多线程基础(四)之死锁
  20. MongoDB数据库整体架构

热门文章

  1. Hadoop和Hbase版本选择
  2. 网络编程入门(代码很详细)
  3. 树莓派学习-I2c通信
  4. lisp调用布置天正的图块_为啥天正电气图块插到原建筑条件图里显示特别小,高手指点下哈!...
  5. 苹果iPhone手机用iTunes更新IOS14.3系统失败怎么解决
  6. Java Spring 框架详解
  7. 2022年了,Windows Vista还能用吗?
  8. Java web 在线预览--参考二
  9. Ubuntu20.04安装输入法
  10. Android smali语法