web-dev-qa-db-ja.com

OpenCVでオブジェクトの面積を計算します

OpenCVを使用して、グレースケール画像内のブロブ/オブジェクトの面積を計算する必要があります(IplImageとしてではなくMatとしてロードします)。エッジの座標(エッジの数はオブジェクトごとに変化します)を取得するか、輪郭のすべての座標を取得してからcontourArea()を使用してオブジェクトの面積を計算することをお勧めします。 。

findContours()C++でプログラミング)を使用して、すべてのノイズを削除し、いくつかの素敵で満足のいく輪郭を取得しました。

findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point());

これで、param contoursがオブジェクトのすべての輪郭の座標をすでに所有していることがわかりました。私はそれを正しく理解しましたか?

はいの場合、それらにアクセスする方法はありますか?

いいえの場合、とにかく輪郭の座標を取得するにはどうすればよいですか?

9
Temer

contoursは実際には次のように定義されています

_vector<vector<Point> > contours;
_

そして今、私はそのポイントにアクセスする方法が明確だと思います。

等高線面積は、contourArea()と呼ばれる関数によって計算されます。

_for (unsigned int i = 0;  i < contours.size();  i++)
{
     std::cout << "# of contour points: " << contours[i].size() << std::endl;

     for (unsigned int j=0;  j<contours[i].size();  j++)
     {
         std::cout << "Point(x,y)=" << contours[i][j] << std::endl;
     }

     std::cout << " Area: " << contourArea(contours[i]) << std::endl;
}
_
24
Sam