10

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

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

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

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

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

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

4

1 に答える 1

28

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;
}
于 2012-07-24T13:19:10.983 に答える