質問: objs.begin(); for (; it != objs.end(); ++it) { rectangle(dst, Point(it->x, it->y), Point(it->x + it->width, it->y + it->height), Scalar(0, 0, 200), 2, 8); } imshow("src", src); imshow("dst", dst); waitKey(0); } catch (const char* str) { cerr << str << endl; } return 0; } ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: エラーメッセージの内容自体は簡単です。一つづつ見てみましょう。 **Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale,** CascadeClassifierというクラスのdetectMultiScaleメソッドでアサーションエラーを検出したという意味ですね。 アサーションとはプログラムの実行条件を満たしているかチェックするための処理で、条件が**”偽”**だった場合にエラーを報告してプログラムの実行を止めるための機能です。 この場合は、何かが空(empty)だったからエラーとして終了してしまったのでしょうね。 **C:\build\master_winpack-build-win64-vc14\opencv\modules\objdetect\src\cascadedetect.cpp, line 1693** このエラーは、**cascadedetect.cpp**の1693行目で見つかりました。 ここまで、分かればdetectMultiScaleメソッドの仕様をググって確認したり、cascadedetect.cppの中身を読むなりして、正しく動作する条件を満たさない原因を探ってください。 今回の場合は、tiitoiさんの指摘のようにカスケードが設定されていない**(空)**のが原因だと思いますが。