C++ opencv使用形态学操作分别提取所有水平线和垂直线
我是opencv的新手。我正在使用VisualStudio 2013上的OpenCV和C++。我的任务是分别提取包含表的文档的所有水平行和垂直行,并使用这些行提取表中的单元格 我只能使用形态学运算来实现这一点 有人能提出实现这一目标的程序吗 这是一个示例文档 终于得到了输出。 看看代码C++ opencv使用形态学操作分别提取所有水平线和垂直线,c++,opencv,extraction,C++,Opencv,Extraction,我是opencv的新手。我正在使用VisualStudio 2013上的OpenCV和C++。我的任务是分别提取包含表的文档的所有水平行和垂直行,并使用这些行提取表中的单元格 我只能使用形态学运算来实现这一点 有人能提出实现这一目标的程序吗 这是一个示例文档 终于得到了输出。 看看代码 string src = "d://sabari//23.jpg"; Mat im = imread(src); Mat gray; if (im.channels() == 3) { cvtColo
string src = "d://sabari//23.jpg";
Mat im = imread(src);
Mat gray;
if (im.channels() == 3)
{
cvtColor(im, gray, CV_BGR2GRAY);
}
else
{
gray = im;
}
adaptiveThreshold(~gray, gray, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
Mat vertical = gray.clone();
int horizontalsize = gray.cols / 30;
Mat structure = getStructuringElement(MORPH_RECT, Size(horizontalsize,1));
erode(gray, gray,structure, Point(-1, -1));
dilate(gray, gray,structure, Point(-1, -1));
imshow("ans", gray);
imwrite("d://out2.jpg", gray);
int verticalsize = vertical.rows / 30;
Mat verticalStructure = getStructuringElement(MORPH_RECT, Size( 1,verticalsize));
erode(vertical, vertical, verticalStructure, Point(-1, -1));
dilate(vertical, vertical, verticalStructure, Point(-1, -1));
imshow("ans1", vertical);
imwrite("d://out3.jpg", vertical);
你可以用Hough吗?不,也不允许使用houghline。谢谢你的回复文件是什么样的?你能剪下它的图片吗?任何文档图片,对于示例,你可以查看这个URL,我分别得到了水平线和垂直线。因为我使用line作为结构元素,所以它可以删除其余元素,只剩下行。当我需要垂直线时,我使用代码中提到的结构元素“verticalStructure”。做得好,如果您显示输出图像,它将对将来阅读本文的人更有帮助。