2013-12-16 45 views
0

我正在尝试一个数字识别。但在轮廓找到后。如图所示,我在主边界框内获得数字0,6,8 ......的边界框。请帮助我完成图像处理的第一步。 我曾尝试使用组矩形,但他们不工作。请检查下面的代码。谢谢。删除数字识别的边界框内的边界框

图片:http://tinypic.com/r/1twx05/5

int main() 
{ 
    Mat inimage, gray; 
    inimage = imread("sample.jpg"); 
    cvtColor(inimage, gray, COLOR_BGR2GRAY); 
    GaussianBlur(gray, gray, Size(5,5), 0); 
    adaptiveThreshold(gray, gray, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, 11, 0); 
    vector<vector<Point> > contours; 
    vector<Vec4i> hierarchy; 
    findContours(gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 

    vector<vector<Point> > contours_poly(contours.size()); 
    vector<Rect> boundRect(contours.size()); 

    for(int i = 0; i < contours.size(); i++) 
    { 
     approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true); 
     boundRect[i] = boundingRect(Mat(contours_poly[i])); 
    } 
    //groupRectangles(boundRect, 1, 0.2); 
    Scalar color = Scalar(0,0,255); 
    for(int i = 0; i< contours.size(); i++) 
    { 
     //drawContours(inimage, contours_poly, i, color, 1, 8, vector<Vec4i>(), 0, Point()); 
     rectangle(inimage, boundRect[i].tl(), boundRect[i].br(), color, 1, 8, 0); 
    } 
    namedWindow("Contours", CV_WINDOW_AUTOSIZE); 
    imshow("Contours", inimage); 
    waitKey(0); 
    return 0; 
} 

回答

0

尝试使用标志:的CV_RETR_TREECV_RETR_EXTERNAL代替

在它告诉只拿外轮廓docs说明。

或按照树层次结构删除嵌套的轮廓(阅读文档的操作指南)