在图像处理中读取了一些堆栈溢出帖后,我制作了一个程序来检测图像中的纸张并删除背景。但目前该程序仅检测轮廓。如何裁剪出最大的轮廓?最终,我将使用此区域并使用tesseract进行字符识别。我被困在预处理部分。
我使用的图像:
这就是我在运行脚本后得到的结果:
如何近似大蓝色轮廓并将其裁剪出来进行字符检测?
以下是我使用的代码:
static void on_canny( int,void* ){
blur( dst, detected_edges, Size(3,3) );
Canny(detected_edges, detected_edges, cannyThreshold, cannyThreshold*r, kernel_size);
findContours(detected_edges, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
Mat drawing = Mat::zeros( detected_edges.size(), CV_8UC3 );
for(int i=0;i<contours.size();i++)
{
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
}
imshow("Contour",drawing);
imshow("Canny", detected_edges);
}