【问题标题】:Search contours on the image在图像上搜索轮廓
【发布时间】:2017-04-20 10:00:22
【问题描述】:

我正在尝试使用 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(...) 函数按照它们在图片中的顺序返回轮廓?有可能吗?

谢谢!

【问题讨论】:

    标签: c++ opencv opencv-contour


    【解决方案1】:

    您不能直接强制findContours 以特定顺序生成轮廓(我的意思是在函数调用中没有参数来调整它)。

    要按“阅读文本”顺序对轮廓进行排序,您可以执行一个循环,遍历所有轮廓并为每个轮廓检索最左上角的点,或者直接遍历每个 contour 对象中的所有点,或使用边界框(例如,参见 minAreaRect)。
    获得所有这些点后,从左到右和从下到上对它们进行排序(可能必须进行一些调整,例如检测从一定高度范围内开始的所有轮廓都属于同一文本行)

    【讨论】:

    • 我想我明白你在说什么。这很简单。我是失败者:D。谢谢! @Soltius
    【解决方案2】:

    您已找到图像中所有轮廓的边界矩形。您可以根据每个轮廓的 centroid 对轮廓进行排序,而不是使用 left-most 点方法,这更加稳健,因为您的方法是针对文本的.

    来自 OpenCV 社区的THIS ANSWER 可能有助于提供一个开始

    【讨论】:

    • 感谢您的回答!
    • @rekrut 也可以看看THIS
    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2023-03-09
    • 2020-11-24
    • 2016-09-11
    • 2022-01-21
    • 2022-01-11
    相关资源
    最近更新 更多