2014-04-23 5 views
2

이 이미지에서 가장 큰 윤곽선/직사각형을 찾아야합니다. image description최대 직사각형 찾기 및 그려 내기 OpenCV

다음 코드를 사용하려고하지만 난 아무 도면 얻을 :

int largest_area=0; 
int largest_contour_index=0; 
cv::Rect bounding_rect; 

Mat thr(src.rows,src.cols,CV_8UC1); 
Mat dst(src.rows,src.cols,CV_8UC1,Scalar::all(0)); 
cvtColor(src,thr,CV_BGR2GRAY); //Convert to gray 
threshold(thr, thr,25, 255,THRESH_BINARY); //Threshold the gray 

vector<vector<cv::Point>> contours; // Vector for storing contour 
vector<Vec4i> hierarchy; 

findContours(thr, contours, hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE); // Find the contours in the image 

for(int i = 0; i< contours.size(); i++) // iterate through each contour. 
{ 
    double a=contourArea(contours[i],false); // Find the area of contour 
    if(a>largest_area){ 
     largest_area=a; 
     largest_contour_index=i;    //Store the index of largest contour 
     bounding_rect=boundingRect(contours[i]); // Find the bounding rectangle for biggest contour 
    } 

} 

Scalar color(255,255,255); 
drawContours(dst, contours,largest_contour_index, color, CV_FILLED, 8, hierarchy); // Draw the largest contour using previously stored index. 
rectangle(src, bounding_rect, Scalar(0,255,0),1, 8,0); 

사람이 가장 큰 RECT를 찾으려면이 이미지를 사용하는 예제로 날을 제공 할 수 있습니까?

답변

2
  • 임계 값을 높여보십시오. 여기

  • 당신은 역치 이미지에 가장 큰 윤곽을 발견, 그래서 thr 단지 threshold()imshow()를 사용하고 무슨 무슨보고를 표시하고이 같이 얼마나된다.

  • 임계 값을 조금 더 높게 설정하여 결과를 확인하십시오. 가장 큰 윤곽에 대한

    threshold(thr, thr,100, 255,THRESH_BINARY); //Threshold the gray 
    

    임계 값 이미지

    enter image description here

    바운딩하는 구형

    enter image description here

    관련 문제