【发布时间】:2017-04-03 22:06:40
【问题描述】:
我目前正在从事一个项目,该项目读取图像,应用多个过滤器,目的是能够在感兴趣的区域周围放置一个边界矩形。
我有一张横格纸上的手写文字图像作为我的输入:
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 找到该示例
我的问题是,我将如何从图像中删除这些水平线。
很抱歉这个冗长的问题(我想尽可能多地解释)并提前感谢您的任何建议。
【问题讨论】:
-
你试图找出垂直方向是什么意思?
-
我已经发布了一个 OpenCV 示例的链接,他们使用形态学运算来提取水平线和垂直线以将文本与水平线分开。
-
我看不到
Mat vertical在哪里声明和初始化?你确定吗? -
我已经初始化了,只是没有包括抱歉。但是:
Mat vertical = dst.clone(); -
你试过从 image2 中减去 image3 吗?
标签: c++ image opencv image-processing