2013-03-23 5 views
2

난 그냥 opencv를 시작하고 일부 모래 위에 바위 그림 주위에 사각형을 놓는 프로그램을 만들려고합니다. 함수 here의 설명서에는이를 사용하는 예제가 들어 있습니다.윤곽선 주위에 직사각형을 그리는 방법은 무엇입니까?

findContours(src, contours, hierarchy, 
    CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); 

findContours의 프로토 타입은 내가이 개 질문이

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

입니다.
1. 예제 hierarchy의 세 번째 인수는 vector<Vec4i>이며 findContours 유형과 일치하지 않습니다. 왜 그런가요?
contours에 저장된 데이터를 사용하여 등고선이 테두리 상자를 만들 위치를 찾는 방법은 무엇입니까?

+0

"findContours의 프로토 타입은"다음 온다 : 무효 drawContours가 (..) 그 의미 했습니까? 잘못된 서명 붙여 넣기? – berak

+0

네 말이 맞아, 나는 틀린 서명을 계속보고 있었고, 그것은 훨씬 더 의미가있다! – joshualan

답변

4
std::vector<std::vector<cv::Point> > contours; 
std::vector<cv::Vec4i> hierarchy; 
cv::findContours(mask, contours, hierarchy, cv::RETR_CCOMP, cv::CHAIN_APPROX_TC89_KCOS); 
for (size_t i=0; i<contours.size(); ++i) 
{ 
    cv::drawContours(img, contours, i, Scalar(200,0,0), 1, 8, hierarchy, 0, Point()); 
    cv::Rect brect = cv::boundingRect(contours[i]); 
    cv::rectangle(img, brect, Scalar(255,0,0)); 
} 
관련 문제