2012-07-24 6 views
9

OpenCV을 사용하여 그레이 스케일 그림의 블롭/객체 영역을 계산해야합니다 (IplImage가 아닌 매트로로드). 가장자리의 좌표 (가장자리의 수를 객체의 객체로 변경)를 얻거나 등고선의 모든 좌표를 얻은 다음 contourArea()을 사용하여 객체의 면적을 계산하는 것이 좋습니다.OpenCV로 객체의 면적을 계산하십시오

findContours() (프로그래밍 : C++)을 사용하여 모든 잡음을 제거하고 훌륭하고 만족스러운 윤곽을 얻었습니다.

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

는 지금은 contours 이미 내 객체의 윤곽선의 좌표를 소유 PARAM을 이해되었다. 나는 그 권리를 얻었습니까?

그렇다면 액세스 할 수있는 방법이 있습니까?

아니요, 그렇다면 어쨌든 윤곽선 좌표는 어떻게 얻습니까?

답변

23

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; 
} 
+1

감사합니다 많이! 그것은 당신이 무엇을하고 있었는지 이해하는 데 짧은 시간이 걸렸지 만, 지금까지 나는 그것이 작동한다는 것을 말할 수 있습니다. 어떤 해결책을 보지 못한 채로 며칠 동안이 문제에 앉아있었습니다 ... – Temer

+0

문서를 읽으면 많은 것을 저장했을 것입니다. 시각 :) . OpenCV와 함께 제공되는 샘플 코드도 훌륭합니다. – Sam