当前位置: 首页 > 知识库问答 >
问题:

有没有办法检测到中间有一个空心的圆圈?

史淳
2023-03-14

我试着检测一个整音符和一个半音符,但对于半音符,我似乎检测不出来,因为它是一个镂空的圆圈。有没有办法检测出镂空的圆圈?

下面是我的代码:

#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{

    // Read image
    Mat im = imread("beethoven_ode_to_joy.jpg", IMREAD_GRAYSCALE);

    // Setup SimpleBlobDetector parameters.
    SimpleBlobDetector::Params params;

    // Change thresholds
    params.minThreshold = 10;
    params.maxThreshold = 200;

    // Filter by Area.
    params.filterByArea = true;
    params.minArea = 15;

    // Filter by Circularity
    params.filterByCircularity = true;
    params.minCircularity = 0.1;

    // Filter by Convexity
    params.filterByConvexity = true;
    params.minConvexity = 0.01;

    // Filter by Inertia
    params.filterByInertia = true;
    params.minInertiaRatio = 0.01;


    // Storage for blobs
    vector<KeyPoint> keypoints;


#if CV_MAJOR_VERSION < 3   // If you are using OpenCV 2

    // Set up detector with params
    SimpleBlobDetector detector(params);

    // Detect blobs
    detector.detect(im, keypoints);
#else 

    // Set up detector with params
    Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);

    // Detect blobs
    detector->detect(im, keypoints);
#endif 

    // Draw detected blobs as red circles.
    // DrawMatchesFlags::DRAW_RICH_KEYPOINTS flag ensures
    // the size of the circle corresponds to the size of blob

    Mat im_with_keypoints;
    drawKeypoints(im, keypoints, im_with_keypoints, Scalar(0, 0, 255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);

    // Show blobs
    imshow("keypoints", im_with_keypoints);
    imwrite("a.jpg", im_with_keypoints);
    waitKey(0);

}

共有1个答案

利海阳
2023-03-14

我给大家的建议是用一些机器学习的算法。以下是整个想法的简单说明:您首先需要为图像创建一个训练集。在训练集中,您需要给一些东西贴上标签。一个标签是“镂空圆圈”。然后给其他便笺贴上标签。我不知道有多少个音符,但你可能会把每一个分别贴上标签,或者把所有不是圣圈的音符贴上一个东西。你也可以给背景贴上标签。然后,你在训练数据上训练一个机器学习模型,然后把你的测试数据(模型在训练时没有看到的图像)输入到它中,得到一个精确度。您可以将数据拆分为训练集和验证集进行训练。

如需贴标签,可使用本网站。

 类似资料:
  • 问题内容: 根据MDN 文档: 该 方法冻结对象:即,防止向其添加新属性;防止现有属性被删除;并防止更改现有属性或其可枚举性,可配置性或可写性。本质上,对象实际上是不可变的。该方法返回被冻结的对象。 我期望在某个日期调用冻结会阻止对该日期进行更改,但是它似乎没有用。这是我正在做的(运行Node.js v5.3.0): 我本以为调用会失败或什么都不做。任何想法如何冻结日期? 问题答案: 有没有办法O

  • 问题在标题中,这里很新,所以还不太了解这个网站。想使用哈希来创建“更多的随机性”,但还不确定Java的数学。Random()还没有,有可能破解它吗?

  • 问题内容: 我想编写一个脚本来自动为修补程序创建功能分支。为此,我需要弄清楚如何查看当前构建中的最后一次提交。 有没有办法从Jenkins API获取最后的提交? 问题答案: 您没有指定要使用的API。但是假设使用Jenkins XML API,它将类似于:

  • 问题内容: 在我的不和谐机器人中,我有2个命令来赋予和创建角色。它们工作得很好,但是如果角色名称包含空格,那么我有问题。它将第二个单词计入第二个参数,使命令产生错误。 理想情况下,我应该能够执行类似的操作,但会收到“无效用户”错误。我有什么办法可以在角色名称中支持空格?提前致谢! 问题答案: 您有几种选择: 使用角色转换器并要求提及角色: 要求角色用引号引起来: 切换两个参数的位置,以使转换后的用

  • 我一直在看代码实验室的场景形式介绍示例。一切正常,但我也想检测单个(固体)彩色平面。据我所知,ARcore只能检测带有某些图案或强烈对比墙面的平面。是否有任何方法可以检测单个颜色平面或手动方式将对象放置在单个颜色平面上,并使用对象的所有其他控件(旋转,移动)?

  • 由于TypeScript是强类型的,因此简单地使用来检查和听起来是不对的。 TypeScript是否有任何专门的函数或语法糖对此?