• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios和opencv : how to correctly call cvtColor without wasting memory?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:57:16 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在我的 ios 应用程序中使用此功能:

cv::cvtColor(image, image, cv::COLOR_BGR2RGB);

但是当我在我的 - (void)processImagecv::Mat&)image 委托(delegate)方法中调用它时, 图像在内存中消失。因此,几秒钟后,我的应用程序因内存问题而崩溃。
因内存压力而终止

我不只是将转换后的图像复制到以前的图像上吗?
我能做些什么来防止这种行为?

- (void)processImagecv::Mat&)image
{
    cv::cvtColor(image, image, cv::COLOR_BGR2RGB);
}

数据在检查器中的样子的一些输出(这些 vm_allocate 行出现了很多):

0 0x20961000 VM:CoreAnimation 00:22.762.010 • 7,91 MB QuartzCore CA::Render::aligned_malloc(unsigned long, void**)
1 0x20178000 VM:CoreAnimation 00:22.415.490 • 7,91 MB QuartzCore CA::Render::aligned_malloc(unsigned long, void**)
2 0x2114a000 CGSImageData 00:22.762.165 • 5,95 MB CoreGraphics CGSImageDataHandleCreate
3 0x1f3a0000 VM:基础 00:22.752.743 • 5,93 MB libsystem_kernel.dylib vm_allocate
4 0x1fb89000 VM:基础 00:22.408.091 • 5,93 MB libsystem_kernel.dylib vm_allocate



Best Answer-推荐答案


我通常可以毫无问题地转换原始图像。如果您希望保留原始图像,可以创建另一个目标垫图像。所以它是根据具体情况而定的。

宁愿评论也不愿回复,但我的回答会太长。

试试这个方法: 1)很有可能是由于您没有声明 channel 。比如CV_8U3等。

2)如果第一步不起作用,另一个可能性很大:尝试使用 CV_BGR2RGB 而不是 cv::COLOR_BGR2RGB (版本兼容性问题)

3) 你试过删除指针吗? &

如果这三种方法仍然不起作用,请评论您在此答案中收到的确切错误消息。我会尽力帮助你。干杯。

编辑(回答您的意见):

当我谈论 channel 时,我的意思是 CV_8U3, CV_8U 等。不过你不必再尝试了,因为错误是由于 IOS 的激进内核线程设置了所有杀死所有内存不足的进程。这意味着当后台进程正在运行时,它们更有可能被“杀死”以为当前/正在运行/前台进程分配内存。

有关该内核的更多信息:http://newosxbook.com/articles/MemoryPressure.html

我不是 IOS 方面的专家,但我认为你可以尝试:

1)使用全局变量,例如将 Mat Image 设为全局而非局部

2) 对某些人来说有点糟糕的编程约定:跳过函数并将代码从函数转储到试图调用该函数的主/或程序。这确保了 IOS 不需要切换进程,从而杀死它们中的任何一个。

3) 在内核中定义应用程序配置文件(UIBackgroundMode),从而稍微驯服一下激进的内核 killer Jetsam。

4) 当不再需要图像时,从 RAM 中释放图像(删除对它们的引用)

关于ios和opencv : how to correctly call cvtColor without wasting memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864966/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap