c++ - 删除边界框内的边界框以进行数字识别

标签 c++ opencv

我正在尝试数字识别。但是经过轮廓查找。如图所示,我在数字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;
}

最佳答案

尝试使用标志:CV_RETR_EXTERNAL而不是CV_RETR_TREE
docs中所述,它告诉您仅采用外部轮廓。

或按照树的层次结构放置嵌套轮廓(请阅读文档以获取方法)

关于c++ - 删除边界框内的边界框以进行数字识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20610263/

相关文章:

python - uint8 CIE Luv Mat 的取值范围是多少?

c++ - C++ 引用是否保证使用指针 "internally"?

c++ - 为空间优化 tribools 数组

c++ - 使用 strstr() 函数正在破坏

c++ - vector 中的段错误

c++ - Opencv - 如何获取图像中存在的垂直线数(线数)

c++程序读取文件

opencv - 无法在Raspberry Pi的NCS2上处理openvino dnn识别器

python - 检查矩形轮廓内部是否包含数字? (OpenCV - Python)

python - Python(OpenCV)中值过滤器故障