2

OpenCV を使用し、組み込みパラメーターと歪みパラメーターを含むプログラムを作成しています。これらのパラメータは、ディスクに保存された .xml ファイルからロードされます。開始宣言で次のコマンドを使用して、ファイルをロードします。

CvMat *intrinsic  = (CvMat*)cvLoad("Intrinsics.xml");
CvMat *distortion = (CvMat*)cvLoad("Distortion.xml");

ファイルがプログラムの作業ディレクトリにある限り、これは正常に機能します。そうでない場合、プログラムはエラーの性質を示すことなくクラッシュします。以前に xml ファイルが正しく配置されていないという過ちを何度も犯しており、今後のトラブルシューティングを容易にしたいと考えています。

ロードに失敗したファイルに対するガードを作成したいと思います。おそらく、それらが存在しない場合、私のプログラムはエラー メッセージを表示して正常に終了する可能性があります。ここで提案されている方法を見ましたが、うまくいくはずですが、別のヘッダーを含めずにそれを行うためのよりクリーンな方法があるかどうか疑問に思っていました.

たとえば、OpenCV 関数 cvQueryFrame は、フレームを返さない場合は 0 を返します。私はコードを使用します

frame = cvQueryFrame(capture);
if(!frame)
{
    printf("ERROR: Could not get frame from webcam.");
    exit(-1);
}

cvQueryFrame がフレームを返さない場合にプログラムを終了します。マトリックスの読み込みコマンドで同様のことをしたいと思います。これは可能ですか?もしそうなら、どうすればいいですか?

OpenCV のドキュメントを確認しましたが、指定されたファイルが見つからない場合の cvLoad の動作の説明が見つからなかったため、続行する方法がわかりません。

このプロジェクトを C++ で作成し、Windows 7 で実行しています。

4

1 に答える 1

0

それは動作します。さあ、自分で試してみてください:

CvMat *distortion = (CvMat*)cvLoad("Distortion.xml");
if (!distortion)
{
    printf("!!! cvLoad failed");
    exit(-1);
}
于 2012-08-10T20:32:46.670 に答える