• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:opencv contourAreaがエラー)

【解説】OpenCVのcontourArea関数がエラーになる理由と対策

このQ&Aのポイント
  • 輪郭抽出の後に面積最大の輪郭を特定し、処理するためにOpenCVのcontourArea関数を使いたいがエラーになる。
  • エラーの原因は、引数にstd::vectorを渡す必要があるのに、誤ってcv::Matを渡していること。
  • 解決策は、std::vectorを使って輪郭の座標を格納し、それをcontourArea関数の引数に渡すこと。

質問者が選んだベストアンサー

  • ベストアンサー
  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.1

提示されたソースの部分だけ見ると問題ないように見えます。 ソース全体を見せていただけますか?(特に #include のあたり)

uekinda
質問者

お礼

返信遅くなりすいません お使いのopencvのバージョン2.2.0でしょうか? そのせいかとも思っていますが,今は環境を変えたくないので確認できていません。 vector<Point> approx; contourArea(Mat(approx) で代用してとりあえず動いていますので, もう少したってバージョンupして確認してみます。 ありがとうございました。

uekinda
質問者

補足

回答ありがとうございます。 ソース全体は次のとおりです。 宜しくお願いします #include "stdafx.h" #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace cv; using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<Point> contour; contour.push_back(Point2f(0, 0)); contour.push_back(Point2f(10, 0)); contour.push_back(Point2f(10, 10)); contour.push_back(Point2f(5, 4)); double area0 = contourArea(contour); vector<Point> approx; approxPolyDP(contour, approx, 5, true); double area1 = contourArea(approx); cout << "area0 =" << area0 << endl << "area1 =" << area1 << endl << "approx poly vertices" << approx.size() << endl; return 0;

その他の回答 (1)

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.2

コピーアンドペーストしてみましたが、私の環境ではコンパイルエラーは出ませんでした。 OpenCV のインストールに失敗しているのではないかと思います。 1. OpenCV を再インストールしてみる 2. include ディレクトリなど、パスがちゃんと通っていることを確認する などしても直りませんか? また、OpenCV をインストールした時の手順を詳しく書いていただけると、なにかわかるかもしれません。

関連するQ&A

専門家に質問してみよう