【发布时间】:2014-05-23 11:51:49
【问题描述】:
我正在腐蚀带有文本块的图像,然后使用findContours() 查找所有文本块,然后绘制它们的边界矩形。然而,有时图像中的噪声会产生非常小的矩形,它们要么位于较大的矩形中,要么位于没有文本的地方。
我正在使用此代码查找轮廓并绘制它们。
double element_size = 20;
RNG rng(12345);
Mat element = getStructuringElement( cv::MORPH_ELLIPSE,cv::Size( 2*element_size + 1, 2*element_size+1 ),cv::Point( element_size, element_size ) );
erode(quad, quad, element);
vector<vector<cv::Point> > contours;
vector<Vec4i> hierarchy;
quad.convertTo(quad, CV_8UC1);
findContours( quad, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0) );
vector<vector<cv::Point> > contours_poly( contours.size() );
vector<cv::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]) );
}
Mat drawing = Mat::zeros( quad.size(), CV_8UC3 );
for( int i = 0; i< contours.size(); i++ )
{
Scalar color = Scalar(0,255, 0 );
rectangle( drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );
}
在运行示例后,我得到了返回结果:
如何修改我的代码,以便我可以删除不大于 n 的任何矩形,这样我只能保留完整的文本块,我还需要删除围绕整个卡片的最大轮廓。
【问题讨论】:
标签: c++ opencv bounding-box