我目前正在开发一个项目,该项目读取图像,应用多个过滤器,目的是能够在感兴趣的区域周围放置一个边界矩形。
我在衬纸上有手写文字的图像作为我的输入:
string imageLocation = "loctation of image file";
src = imread(imageLocation, 1);
然后我将图像转换为灰度并应用自适应阈值处理:
cvtColor(src, newsrc, CV_BGR2GRAY);
adaptiveThreshold(~newsrc, dst, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
然后我使用形态学操作来尝试消除图像中的水平线:
Mat horizontal = dst.clone();
int horizontalSize = dst.cols / 30;
Mat horizontalStructure = getStructuringElement(MORPH_RECT, Size(horizontalSize,1));
erode(horizontal, horizontal, horizontalStructure, Point(-1, -1));
dilate(horizontal, horizontal, horizontalStructure, Point(-1, -1));
cv::resize(horizontal, horizontal, cv::Size(), 0.5, 0.5, CV_INTER_CUBIC);
imshow("horizontal", horizontal);
然后我尝试使用相同的侵蚀和放大器扩张方法来找出垂直方向:
int verticalsize = dst.rows / 30;
Mat verticalStructure = getStructuringElement(MORPH_RECT, Size( 1,verticalsize));
erode(vertical, vertical, verticalStructure, Point(-1, -1));
dilate(vertical, vertical, verticalStructure, Point(-1, -1));
cv::resize(vertical, vertical, cv::Size(), 0.5, 0.5, CV_INTER_CUBIC);
imshow("vertical", vertical);
我正在关注OpenCV的示例,可以找到here
我的问题是,如何从图像中删除这些水平线。
抱歉这个冗长的问题(我想尽可能多地解释),并提前感谢任何建议。
答案 0 :(得分:1)
您可以尝试在频域中进行此操作,如下所示:
http://lifeandprejudice.blogspot.ru/2012/07/activity-6-enhancement-in-frequency_25.html
http://www.fmwconcepts.com/imagemagick/fourier_transforms/fourier.html
使用FFT在添加/删除图像中的规则网格方面非常有效。