###実現したいこと
体積中心位置の算出
その過程で、ノイズ除去も利用したい。
###発生している問題
cv::morphologyExを利用している際にハンドルエラーが起きてしまう
以下該当コードになります。
RopeSideVision
1void RopeSideVision::Compute() { 2 cv::cvtColor(_frame, _frame, CV_RGB2GRAY); 3 cv::cvtColor(_frame, _decorated_frame, CV_GRAY2BGR); 4 cv::threshold(_frame, _binary, 50, 255, cv::THRESH_BINARY); 5 cv::Mat _noiseRemoval; 6 cv::morphologyEx(_binary, _noiseRemoval, cv::MORPH_CLOSE, _kernel); //←ここでハンドルエラーが発生 7 8 cv::Canny(_noiseRemoval, _canny, 50, 200, 3); 9 10 //以下、体積中心位置の検出プログラム 11}
RopeSideVision
1class RopeSideVision 2{ 3public: 4 //// Ctor/Dtor 5 //// Getters / Setters 6 7 // Public method 8 void Compute(); 9private: 10 // Private members 11 cv::Mat _canny; 12 cv::Mat _binary; 13 cv::Mat _kernel; //cv::getStructuringElement(cv::MORPH_RECT, cv::Size(19, 19))と定義 14 15 cv::Point2f _upsidemc; 16 cv::Point2f _bottomsidemc; 17};
###試したこと
cv::Point2f _upsidemc;
cv::Point2f _bottomsidemc;
以上をコメント化し、問題コードのcv::Cannyまでを実行すると、エラーは起こりませんでした。
エラーの内容を記載できますか?
質問欄のコードからわかる範囲では、cv::morphologyEx() で _upsidemc、_bottomsidemc は使っていないので、関係ないと思いますがいかがでしょうか。
ありがとうございます。エラーコードを記載させていただきました。
私もそのように感じるのですが、コメント化を行うことによってエラーが回避できるため、
なんらかの関わりがあるのではないかと考えています。
また、逆にcv::morphologyEX()のみをコメント化した場合でも実行可能でした。
一応確認ですが、 _kernel はちゃんと値は入っていますでしょうか。
そこが問題なければ、なにか他の部分のコードで未初期化の変数や不正なメモリにアクセスしている部分があって、それがたまたまそのメンバ変数を定義したことによって顕在化しただけの気がします。
C/C++ はそのような不正なアクセス等のコードを書いても動作未定義なので、直ちにエラーになるわけではないので、直接の原因究明が難航することがままあります。
質問のコードに出てくる変数等に問題がなければ、他の部分もチェックしてみてください。
ありがとうございます!!
確認したところ、_kernelに値は入っておりました。
なるほど、そういう場合があるのですか。
他部分についても探ってみます!
あなたの回答
tips
プレビュー