我尝试用C ++帮助OpenCV库来解决识别问题。
我有一些文字(下方),我想用cvFindContours(...)
函数分隔本文中的每个符号。之后,我想在神经网络的输入上发送每个分离的符号以进行识别。一切都好。我可以在我的图像中获得所有轮廓,并且可以使用帮助cvDrawContours(...)
功能(下面)在我的图像上绘制它。但cvFindContours(...)
返回无序序列(此序列中第一个轮廓上的指针),其中包含所有找到的轮廓。对于我的任务订单非常重要。
CVAPI(int) cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
int header_size CV_DEFAULT(sizeof(CvContour)),
int mode CV_DEFAULT(CV_RETR_LIST),
int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE),
CvPoint offset CV_DEFAULT(cvPoint(0,0)));
-image
- 来源图片
-storage
- 用于存储包含轮廓的位置
-first_contour
- 指向存储中第一个轮廓的指针
-mode
- 搜索模式(我使用CV_RETR_EXTERNAL
搜索外部轮廓)
-method
- 近似方法(我默认使用CV_CHAIN_APPROX_SIMPLE
)
如何使cvFindContours(...)
函数按照图片中的顺序返回轮廓?有可能吗?
谢谢!
答案 0 :(得分:2)
你不能直接强制findContours
以某种顺序产生轮廓(我的意思是在函数调用中没有参数来调整它)。
在"阅读文字"中对轮廓进行排序顺序,你可以做一个遍历所有轮廓的循环,并通过直接遍历每个contour
对象中的所有点,或者通过使用边界框来检索每个轮廓最顶端的点(参见{{3例如)。
获得所有这些点后,可以从左到右,从下到上对它们进行排序(可能需要进行一些调整,例如检测从高度范围内开始的所有轮廓都是同一文本行的所有部分)
答案 1 :(得分:1)
您已找到图像中存在的所有轮廓的边界矩形。您可以根据每个轮廓的质心对轮廓进行排序,而不是使用最左侧点方法,因为您的方法适用于文本
来自OpenCV社区的THIS ANSWER可能有助于提供一个开始