読者です 読者をやめる 読者になる 読者になる

堕(惰)プログラマ開発記録

タイトル変えようかなとも思ってるけれど,思い浮かばない

cv::findContoursのエラー

C++ OpenCV

高専プロコンのOpenCVで輪郭探索のコードを書いた時になんかこんなエラーが実行時に例外とともに出力されてきました.
というか,今回の記事はただの備忘録です.OpenCVの中身読んで理解しようかと思ったけど,めんd(ry

OpenCV Error: Assertion failed (mtype == type0 || (CV_MAT_CN(mtype) ==  CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0)) in unknown function, file ..\..\src\opencv\modules\core\src\matrix.cpp, line 1405


関数が見つからないとかなんとか言ってますが,原因となるコードはこんなコードです.よく見る輪郭探索関数の呼び出しのようなもの.

// cv::Point2f = cv::Point_<float> 版
std::vector<std::vector<cv::Point2f>> contours;
cv::findContours(threshold, contours, CV_RETR_TREE, CV_CHAIN_APPROX_NONE);


このエラー,cv::Point2fを詰めているのが悪いみたいで,次のコードみたいにcv::Pointに変更すると正常に実行が終了しました.

// cv::Point = cv::Point_<int> 版
std::vector<std::vector<cv::Point>> contours;
cv::findContours(threshold, contours, CV_RETR_TREE, CV_CHAIN_APPROX_NONE);


ただ,cv::Pointもcv::Point2fも,cv::Point_をtypedefして定義したものなので,前者はint,後者はfloatになってます.
「なぜ対応しなかったし!!」って感じだったりするんですけど,輪郭は画像のドットなのでfloatである必要はないのかなと.


なんか同じような現象が同じようなメッセージで,他の関数でも起こるようです.


前の方も言ってましたが,サンプルコード通りに書かないとやっぱダメなのかな.(知らん)