C++ 如何识别简单的笔迹形状?

C++ 如何识别简单的笔迹形状?,c++,c,open-source,image-recognition,C++,C,Open Source,Image Recognition,我有一组简单的形状(见下图),我想识别手写形状,并找出它可能在该组中的形状 有什么简单的算法可以做到这一点吗?或者任何开源库 顺便说一句,我的任务很简单,所以我不使用像OpenCV这样太复杂的库 提前谢谢 这是一个老项目,但可能与您正在寻找的内容一致 需要OpenCV,但正如评论员所指出的,学习它可能是值得的。这是一个老项目,但可能与您所寻找的内容一致 需要OpenCV,但评论家指出,学习它可能值得你花时间。 < P>我不知道如何在C或C++中完成,但是算法很简单。请注意,成功率会随着每个角度添

我有一组简单的形状(见下图),我想识别手写形状,并找出它可能在该组中的形状

有什么简单的算法可以做到这一点吗?或者任何开源库

顺便说一句,我的任务很简单,所以我不使用像OpenCV这样太复杂的库

提前谢谢

这是一个老项目,但可能与您正在寻找的内容一致

需要OpenCV,但正如评论员所指出的,学习它可能是值得的。

这是一个老项目,但可能与您所寻找的内容一致


需要OpenCV,但评论家指出,学习它可能值得你花时间。

< P>我不知道如何在C或C++中完成,但是算法很简单。请注意,成功率会随着每个角度添加到形状而降低,因此这对于识别您上面给出的基本形状集应该是有好处的,但不会有太多其他方面

  • 角点识别。您需要识别各种角点,这很容易。如果你不是在寻找一个惊人的形状识别算法,只是一个快速简单的算法,只需寻找一组像素,其中一条线从一侧开始,而不是从另一侧结束。您可以在大约10到20个像素块内完成此操作,如果某些形状可能有非常松散的角(如第二个手写形状的下角),则可能需要更多像素块。但是,使用的块大小越大,检测到的小形状就越少
  • 错误检查。首先,如果发现少于3个角,但大于零,则您知道有错误。否则,如果找到零,可以使用另一种算法确定它是圆还是椭圆,并返回该结果。如果你没有,继续前进
  • 直线矫直。首先,我们确定拐角的连接顺序(简单)。然后,通过比较X和Y坐标的差异,消除两个差异中的最小差异,或者,如果它们超过某个阈值,则假设一条对角线,从而拉直直线
  • 角点匹配。一旦完成了角点匹配,就可以通过匹配线特征(如角度和距离)来轻松识别形状(例如,从任意点开始,找到水平方向,就知道有一个正方形或矩形,可以通过比较长度来区分)

  • 当然,完全精确的匹配永远不可能实现。我甚至无法判断你的第二个例子是倾斜的平行四边形还是倾斜的正方形(或者菱形或矩形)。C++中,我不知道如何做它,但是算法是简单的。请注意,成功率会随着每个角度添加到形状而降低,因此这对于识别您上面给出的基本形状集应该是有好处的,但不会有太多其他方面

  • 角点识别。您需要识别各种角点,这很容易。如果你不是在寻找一个惊人的形状识别算法,只是一个快速简单的算法,只需寻找一组像素,其中一条线从一侧开始,而不是从另一侧结束。您可以在大约10到20个像素块内完成此操作,如果某些形状可能有非常松散的角(如第二个手写形状的下角),则可能需要更多像素块。但是,使用的块大小越大,检测到的小形状就越少
  • 错误检查。首先,如果发现少于3个角,但大于零,则您知道有错误。否则,如果找到零,可以使用另一种算法确定它是圆还是椭圆,并返回该结果。如果你没有,继续前进
  • 直线矫直。首先,我们确定拐角的连接顺序(简单)。然后,通过比较X和Y坐标的差异,消除两个差异中的最小差异,或者,如果它们超过某个阈值,则假设一条对角线,从而拉直直线
  • 角点匹配。一旦完成了角点匹配,就可以通过匹配线特征(如角度和距离)来轻松识别形状(例如,从任意点开始,找到水平方向,就知道有一个正方形或矩形,可以通过比较长度来区分)

  • 当然,完全精确的匹配永远不可能实现。我甚至不知道第二个示例形状是倾斜的平行四边形还是倾斜的正方形(或菱形或矩形)。

    这本质上是线检测 它只适用于直线形状,绝不简单。
    假设您的图形中有k条线段,使用k-means算法将点聚合为直线。
    首先将点随机分为若干组。
    对于这些簇中的每一个,计算点所逼近的直线。(到各点的所有距离之和最小的线)
    离群值(离直线最远的点)应重新分配到其他更适合它们的聚类中。
    重复上一步,直到达到某个阈值
    如果未达到所需的阈值,则可以尝试不同的K值
    如果您确实到达了一个点,那么您可以计算这些线的交点,并提取将不规则形状与规则形状匹配所需的其他属性。
    你可以用这种方法区分三角形和正方形,正方形和平行四边形,但这非常复杂。

    这种“算法”可以适用于曲线、虚线或线不相交的形状,因此它相当健壮

    这本质上是线检测
    它只适用于直线形状,绝不简单。
    假设您的图形中有k条线段,请使用k-means算法聚合poin