【问题标题】:cvFindExtrinsicCameraParams2() error on iPhone 4iPhone 4 上的 cvFindExtrinsicCameraParams2() 错误
【发布时间】:2011-07-06 09:48:23
【问题描述】:

在使用 cvFindExtrinsicCameraParams2() 方法时,我在 OpenCV (v1.1,2.0,2.2) 中遇到错误,它适用于 iPhone3GS,但在 iPhone4 上测试时会摔倒。错误是:

“被释放对象的校验和不正确 - 对象在被释放后可能被修改”

我最终将大量 cvMat 类型转换为浮点数,而不是双精度数,这解决了问题,但引入了结果溢出给我一些奇怪的结果。

iPhone4 对双打有堆栈限制吗?

无论如何 - 只是想知道是否有人解决了这个问题? (还有 - 有人知道优化版本吗?)

【问题讨论】:

    标签: iphone c opencv augmented-reality


    【解决方案1】:

    我不知道您为什么会出错,但要回答您的问题,堆栈的大小是有限的。

    在大多数系统上,float 的大小为 4 字节,double 的大小为 8。因此,当您使用double 来表示您的数据时,您实际上使用的空间是float 的两倍。

    一个简单的解决方法(如果可以的话)是在堆上为 cvMat 分配内存而不是堆栈。为此,请声明一个指针 do cvMat 并使用 new 运算符为其分配空间。

    Thread Management 文档指出 iOS 主线程的堆栈大小为 1 MB,辅助线程为 512K。您可能需要在主线程上进行核心处理。

    【讨论】:

    • 感谢您的更新 - 已经完成并重构了大量 OpenCV 代码,但仍然遇到同样的问题。进一步研究它并认为它可能与为操作线程分配了多少内存有关。需要仔细检查,但认为 iOS v4.1 的分配高于 iOS v4.2+。如果是这种情况,那么认为这应该是一个简单的解决方法,即创建一个新线程来处理它,并使用更大的堆栈大小。
    • 仍然有同样的问题 - 由于这些问题,我现在正在寻找替代实现来确定姿势 - 因为我已经浏览了代码并尝试尽可能多地移动,所以内存需求更少到堆收效甚微。还尝试在不同的线程上运行处理。有谁知道是否有工具可以让我查看每个线程的堆栈使用情况?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多