从图像

时间:2016-11-20 13:19:55

标签: c++ image opencv image-processing

我目前正在开发一个项目,该项目读取图像,应用多个过滤器,目的是能够在感兴趣的区域周围放置一个边界矩形。

我在衬纸上有手写文字的图像作为我的输入:

string imageLocation = "loctation of image file";
src = imread(imageLocation, 1);

Inputted image

然后我将图像转换为灰度并应用自适应阈值处理:

cvtColor(src, newsrc, CV_BGR2GRAY);
adaptiveThreshold(~newsrc, dst, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);

Applied adaptive thresholding

然后我使用形态学操作来尝试消除图像中的水平线:

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);

产生以下(迄今为止如此好): Input image horizontal line seperation

然后我尝试使用相同的侵蚀和放大器扩张方法来找出垂直方向:

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

但是,我得到的垂直输出是: Vertical output

我的问题是,如何从图像中删除这些水平线。

抱歉这个冗长的问题(我想尽可能多地解释),并提前感谢任何建议。

1 个答案:

答案 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在添加/删除图像中的规则网格方面非常有效。