4

iOSプラットフォーム用のopencvアプリを開発しています。デバッグおよびリリーススキーム用に自分でopencvをコンパイルしましたが、cv::meanStdDevデバッグスキームで関数を実行しようとすると、アプリケーションは例外で失敗します(リリースでは正常に動作します)。テスト機能は非常に単純です。

float list[] = {1.2,1.2,1.3,0.3,6.5,2.2,0.9,0.8,0.9};
cv::Mat test(1,9,CV_32F, list);
cv::Scalar mean1, stddev1;
cv::meanStdDev(test, mean1, stddev1);
printf("[%f, %f]", mean1.val[0], stddev1.val[0]);

この関数はリリーススキームでは正しく機能しますが、デバッグでは次のような例外がスローされます。

OpenCV Error: Assertion failed (dims == 2 && ((sizes[0] == sz.height && sizes[1] == sz.width) || (allowTransposed && sizes[0] == sz.width && sizes[1] == sz.height))) in create, file /Users/jgoenetxea/libraries/OpenCV-2.4.0/trunk/opencv/modules/core/src/matrix.cpp, line 1375
terminate called throwing an exception

この行は、行列クラスの「作成」関数です。この時点で、このkind()関数は、同じマトリックスのデバッグスキームとリリーススキームで異なる値を提供します。デバッグスキームが選択されている場合、この関数の結果により、実行は関数呼び出しでkind()一部のデータをチェックし、その後失敗します。CV_Assert

何か案は?誰かが私が何をチェックできるか知っていますか?

4

1 に答える 1

4

これはあなたのプログラム全体ですか?そうでない場合は、Mat 要素への間違ったアクセスが原因で OpenCV で非常に一般的なヒープ破損の可能性があります。

元:

Mat<uchar> mat(2,2);
mat.at<float>(1,1)=0.1;

作成したプログラム セグメントの前にそのようなコードがある場合は、ヒープが破損している可能性があるため、修正する必要があります。リリース モードでは、コードのこの部分に干渉しない別の領域を破損している可能性がありますが、デバッグでは、そうであるように見えます。

しかし、これがあなたのコード全体である場合、私はあまり助けられません...私には正しいように見えます。

于 2012-07-06T12:40:08.697 に答える