2011-07-06 2 views
1

cvFindExtrinsicCameraParams2()メソッドを使用しているときにOpenCV(v1.1,2.0,2.2)でエラーが発生しましたが、iPhone3GSで動作しますが、iPhone4でテストしたときに落ちます。エラーは次のとおりです。iPhone4でcvFindExtrinsicCameraParams2()エラーが発生しました

- 私は問題を解決しますが導入さダブルスとは対照的に、フロートにCvMatのタイプの全体の多くを変換することになった

を「解放されたオブジェクトのための間違ったチェックサムオブジェクトは、おそらく解放された後に変更されました」結果が溢れて私に奇妙な結果がもたらされます。

iPhone4の倍数のスタック制限はありますか?

とにかく誰でもこの問題を解決したことがありますか? (誰も最適化されたバージョンを知っていますか?)

答えて

1

私はなぜあなたがエラーがあったのかわかりませんが、あなたの質問に答えるために、スタックはサイズが限られています。ほとんどのシステムで

floatの大きさは、バイトでありdoubleはあります。したがって、doubleを使用してデータを表現すると、実際にはfloatの2倍のスペースが使用されます。

単純な回避策(可能な場合)は、スタックの代わりにHEAPでにcvMatのメモリを割り当てます。これを行うには、ポインタcvMatを宣言し、新しいオペレータを使用してそれにスペースを割り当てます。

Thread Management DOCはIOSのメインスレッドのスタックサイズセカンダリスレッド 1 MBから512Kであると述べています。メインスレッドで処理の中核を行う必要があるかもしれません。

+0

ありがとうございました - OpenCVコードを大量にリファクタリングしていますが、同じ問題が続いています。それをさらに調べて、操作スレッドに割り当てられているメモリの量と関係があると考えてください。これをもう一度確認する必要がありますが、iOS v4.1の方がiOS v4.2 +よりも高い割り当てをしていると思います。このような場合は、簡単な修正、つまり新しいスレッドを作成してより大きなスタックサイズで処理する必要があると考えてください。 – Josh

+0

更新された回答。 – karlphillip

+0

まだ同じ問題があります - これらの問題のためにポーズを決定する代替実装を見ています - 私はコードを使いこなし、ほとんど成功してヒープに移動できるようにしようとすると、メモリ要件が少なくて済みます。また、別のスレッドで処理を実行しようとしました。私は各スレッドのスタック使用量を見ることを可能にするツールがあるかどうか誰にも知っていますか? – Josh

関連する問題