先上一张图:
像上面这张图是拍照图片,由于拍照图片不像扫描图片那样线条是直的,用线条来切割应该是行不通的。
分析表格特征:是由多个矩形框组成的,每个矩形框都是一个单独的轮廓 。
下面尝试用轮廓分析来拆分这张表格,上代码:
Mat src = imread("F:/TestImg/table1.jpg",0);
if (src.empty())
{
cout << "Load image error!!!" << endl;
return -1;
}
Mat imgBin, imgTemp;
adaptiveThreshold(src, imgBin, 255, 0, 0, 25, 15); //二值化
imgBin.copyTo(imgTemp);
bitwise_not(imgTemp, imgTemp); //反色
//查找轮廓
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(imgTemp, contours, hierarchy, 1, 1); //注意最后2个参数
size_t cSize = contours.size();
int nCount = 0;
cvtColor(imgBin,imgBin,COLOR_GRAY2BGR);
vector<vector<Point> > contours2;
for (size_t i = 0; i < cSize; i++