以前のバージョンでは手動でスタックを巻き戻していましたが,それとは対照的に, OpenCV の新しいエラーハンドリング機構は例外を利用しています.
ある条件をチェックして,それを満たしていない場合にエラーを発生させたいならば, CV_Assert () または CV_Error () を利用してください.
CV_Assert(mymat.type() == CV_32FC1);
...
if( scaleValue < 0 || scaleValue > 1000 )
CV_Error(CV_StsOutOfRange, "The scale value is out of range");
リリースビルド時には何のコードも生み出さない CV_DbgAssert もあります.
エラーを扱うには,標準的な例外ハンドリング機構を利用してください:
try
{
...
}
catch( cv::Exception& e )
{
const char* err_msg = e.what();
...
}
cv::Exception の代わりに, std::exception と書くこともできます.前者は後者からの派生だからです.
当然ですが,この機構を上手く働かせるために,そして,オブジェクトの破棄で悩まないように, IplImage* や CvMat* そして生ポインタ,を利用しないようにするべきです.通常は cv::Mat , std::vector<> , cv::Ptr などを利用するようにしましょう.