OpenCV NSImage 到 IplImage 转换器程序中的泄漏

2023-12-31

我在下面放置的代码中存在泄漏。当我使用 cvCreateImage 而不是 cvCreateImageHeader 时,泄漏量为 304Kb 和 107b,但当我更改时,泄漏量仅为 107 字节。 你能帮我找到泄漏点吗?

+ (IplImage *) nsImageToIplImage:(NSImage *)image {
    // NSImage to IplImage

    NSBitmapImageRep *orig = [[image representations] objectAtIndex: 0];
    // a copy or else the color-channel shift that we do later on will affect the original NSImage!

    NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:[orig representationUsingType:NSTIFFFileType properties:NULL]];
    int depth       = [rep bitsPerSample];
    int channels    = [rep samplesPerPixel];
    int height      = [rep size].height;
    int width       = [rep size].width;

    // note- channels had better be "3", or else the loop down below will act pretty funky...
    // NSTIFFFileType seems to always give three-channel images, so I think it's okay...


    IplImage *to_return = cvCreateImageHeader(cvSize(width, height), depth, channels);
    cvSetImageData(to_return, [rep bitmapData], [rep bytesPerRow]);



    // Reorder BGR to RGB
    // no, I don't know why it's in BGR after cvSetData
    for (int i = 0; i < to_return->imageSize; i += 3) {
        uchar tempR, tempG, tempB;
        tempR = to_return->imageData[i];
        tempG = to_return->imageData[i+1];
        tempB = to_return->imageData[i+2];

        to_return->imageData[i] = tempR;
        to_return->imageData[i+1] =tempG;
        to_return->imageData[i+2] = tempB;

    }




    return to_return;
}

这是您对 cvSetImageData 的调用。当您调用 cvCreateImage 时,它​​会分配标头和图像数据。 cvCreateImageHeader 仅分配图像头。

当您调用 cvSetImageData 时,它不会将数据复制到结构中。相反,它只是将指针设置为指向您提供的任何数据。因此,如果调用cvCreateImage,然后调用cvSetImageData,则cvCreateImage分配的图像数据将丢失。

您这样做的方式的一个相当令人讨厌的副作用是,用户可能会调用 cvReleaseImage,这实际上会尝试释放 [rep bitmapData] 中的数据。更好的方法是简单地调用 cvCreateImage,然后将 [rep bitmapData] 中的所有数据复制到其中。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV NSImage 到 IplImage 转换器程序中的泄漏 的相关文章

  • spring-cloud-starter-hystrix 和 spring-cloud-starter-archaius 集成的内存泄漏问题

    我们将 spring cloud starter hystrix 与 spring cloud starter archaius 一起使用 一旦战争取消部署 我们就无法停止 archaius 的 poolingconfigurationSo
  • 为什么以及如何避免事件处理程序内存泄漏?

    通过阅读 StackOverflow 上的一些问题和答案 我刚刚意识到 使用以下命令添加事件处理程序 在 C 或者我猜 其他 net 语言 中可能会导致常见的内存泄漏 我过去多次使用过这样的事件处理程序 但从未意识到它们可能会导致或已经导致
  • OpenCV 完美识别物体

    我有一个应用程序 我想一次跟踪 2 个在图片中相当小的对象 该应用程序应该在 Android 和 iPhone 上运行 因此算法应该是高效的 对于我的客户来说 如果我们提供一些模式以及附加到要跟踪的对象的软件 以获得易于识别的目标 那就完全
  • 从 2 个摄像头捕获(OpenCV、Python)[重复]

    这个问题在这里已经有答案了 所以我试图从 openCV 中的两个摄像头 python 和 windows 7 进行捕获 我用一台相机拍摄的效果很好 你也会注意到我正在对图像做一些时髦的事情 但这并不重要 这是尝试使用两个的代码 import
  • 在 Android 中使用 OpenCV 查找图像匹配

    我正在尝试构建一个 Android 应用程序 该应用程序可以比较设备相机拍摄的照片 以在一组图像中找到匹配项 我已经在 Android Studio 上配置了 OpenCV 但仅此而已 有人可以通过链接到资源或建议教程来提供帮助吗 Open
  • NSPopUpButton、绑定和缩短的寿命

    我试图了解使用 NSPopUpButton 是多么困难 它无疑是 Cocoa 中最难编程的用户元素 至少就我而言是这样 我想到的用例如下 我有一个名为 Port 的类 代表串行端口 属性中有一个名称字段 在 NSPopUpButton 中
  • 在 XCode 数据模型编辑器中获取属性的最小值

    如何在 XCode 的数据模型编辑器中添加获取的属性以获得一个属性的最小值 我的型号 模型http www freeimagehosting net uploads b48853070e png http www freeimagehost
  • 将 NSTabViewItem 的副本从 NSTabView 添加到同一个 NSTabView

    我正在创建一个简单的网络浏览器 并希望实现选项卡 为此 我使用NSTabView 我基本上希望每个选项卡都有一个WebView这将显示网站已加载 我从只有一个选项卡开始 并希望在创建新选项卡时添加第一个选项卡的精确副本 我尝试过类似的东西t
  • 如何在 opencv 3.0 Beta 中从文件读取 UMat?

    我想用UMat所以我的代码可以使用 OpenCL OpenCV 3 0 0 Beta 在 GPU 和 CPU 上运行 但我找不到将图像文件读入的方法UMat或转换一个Mat to UMat 如何将图像读入UMat 样品用于Mat to UM
  • 获取实体中某个值的最大值

    我正在尝试获取核心数据中实体中属性的最大值 苹果有一个很好的例子here http developer apple com library mac documentation Cocoa Conceptual CoreData Articl
  • 为什么 NSToolbarItem 自动被禁用?

    我的 Mac 幻灯片应用程序工具栏中的按钮有点问题 我希望在没有活动幻灯片时禁用这些按钮 在有活动幻灯片时启用这些按钮 为了实现这一点 我设置了按钮isEnabled财产给false在开始时 我已经尝试过 Interface Builder
  • 为什么 _CrtDumpMemoryLeaks 在这里报告内存泄漏?

    我想在调试模式下检查内存泄漏 我使用 Windows 为了完成这项工作 函数 CrtDump内存泄漏 http msdn microsoft com en us library d41t22sb v vs 110 aspx 现在 为什么这段
  • ASP .NET Web 应用程序内存泄漏 - 探查器显示大量字符串

    我的 Web 应用程序经常遇到对分配给应用程序池的虚拟内存设置的 IIS 限制 这会导致 IIS 停止该应用程序 我一直在尝试使用 NET 内存分析器来识别我的应用程序中可能存在的内存泄漏 到目前为止 GC 后保留的最大内存量似乎是在字符串
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • 使用 OpenCV 和 Python 叠加两个图像而不丢失颜色强度

    如何叠加两个图像而不损失两个图像的颜色强度 我有图像1和图像2 2 我尝试使用 0 5 alpha 和 beta 但它给我的合并图像的颜色强度只有一半 dst cv2 addWeighted img1 0 5 img2 0 5 0 但是当我
  • 如何确定透视变换后的点在新图像平面中的位置?

    我使用 OpenCV Python Numpy 图像中有三个点 我知道这些点的确切位置 P1 P2 N1 我要将图像转换为另一个视图 例如 我将透视图转换为侧视图 如果这样做 我将无法获得图像平面中这三个点的确切位置 我应该以一种可以获得这
  • Android API人脸检测与OpenCV/JavaCV人脸检测

    我在 Android 设备上使用了本地 Android 人脸检测 但它似乎很慢 而且我不太确定其可靠性 我还使用了 OpenCV 的人脸检测 但仅限于 PC 而不是 Android 设备 对于 Android 我猜我必须使用 JavaCV
  • Java:BufferedReader 在 close() 上永远挂起,并且 StreamDecoder 不尊重线程中断

    我有一个 Java 程序 它启动一个由 Process 类表示的单独子进程 然后附加查看 Process 的 stdout stderr 的侦听器 在某些情况下 进程将挂起并停止取得进展 此时 TimeLimiter 将抛出 Timeout
  • python openCV 中的人口普查变换

    我开始在一个与立体视觉相关的项目中使用 openCV 和 python 我找到了关于使用 openCV 在 C 中进行人口普查转换的文档页面 link http docs opencv org 3 1 0 d2 d7f namespacec
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务

随机推荐