我正在为我的AP CS课程开发一个项目,它是一个iOS应用程序,可以让用户拍摄名片的照片,并基本上“扫描”卡片,并根据信息中的信息在手机中创建联系人。图片。我在边缘检测和自适应阈值方面取得了很大的进步,现在我需要在侵蚀后找到文本。
我一直在使用一些斯坦福大学学生写的一篇论文,他们把这作为他们的项目之一并且发现它很有帮助,但是我很难实现找到侵蚀文本边界框的代码。
以下是论文的一部分:
经过校正的图像的灰度版本用于计算局部强度方差,以定位文本段的可能边界框。在名片中,文本通常位于组和多个位置。为了计算像素的方差,我们考虑以该像素为中心的35×35的邻域窗口。方差可以计算为E [X2] -E [X] 2,其中X是表示邻域中的像素值的随机变量,E []是期望值运算符。我们通过对灰度校正图像应用盒式滤波器来计算E [X]。通过对通过对所有像素值求平方而获得的图像应用相同的盒滤波器来计算E [X2]。 将阈值100应用于方差图像。方差≥100的所有位置都被归类为文本区域。然后找到这些区域的轮廓和边界框。整流缺陷通常会导致图像边界的高度变化。非常大,非常小,太窄的盒子被拒绝了。
鉴于这样的图像,如何使用OpenCV C ++找到文本的所有边界框?包括其他blob也很好!
答案 0 :(得分:1)
Convex hull将为您提供凸边界多边形。如果您采用图像的渐变然后应用findContours(),您将获得更精细的字符串或段落轮廓。
最后,在倒置图像bounding rectangle上使用findContours将为您提供一个直的矩形,而fitting ellipse在每个组件中将为您提供一个近似旋转的矩形。以下是代码大纲:
vector<vector<Point> > contours;
Mat hierarchy, I2=255-I;
findContours(I2, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
for (int i=0; i<contours.size(); i++)
Rect rect = boundingRect(contours[i]);
矢量轮廓将有一个点向量,可以在每个段中使用。