我正在寻找一些示例,说明如何为三角形检测实现霍夫变换。 用于符号检测。 我已经完成了颜色阈值处理。 您对使用HoughLinesP()什么HoughLinesP() 我正在做Canny,然后阈值化并使用HoughLines,但是结果是很多行,而且我的标志里面也有。 我不认为现在找到路口将是我的解决方案。

你怎么看? 有任何例子或其他想法吗? 我也尝试过findContours() ,但是三角形是圆形的,因此它们需要很大的近似值,这使得检测到的垃圾非常丰富。

===============>>#1 票数:0

在我看来,将HoughLinesP用于此任务将非常困难,因为它很不稳定并且在很大程度上取决于输入图像和参数的预处理。 不久前,我解决了类似的任务,并向您推荐了以下处理管道(假设输入图像是灰度的):

  1. cv::blur用于图像增强
  2. cv::MSER来查找区域(此处需要调整参数)。 您可能要拒绝小的区域。
  3. 对于每个区域:

    3.1。 cv::convexHull查找区域的凸包。

    3.2。 cv::approxPolyDP使用增加epsilon参数的凸包,直到它返回3条或更少的折线。 您可以拒绝行数少于3的区域。

    3.3。 最后,您可以计算线之间的角度并检查其为三角形。 如果所有角度都接近60度(或略小于90度),则将该区域标记为三角形。

希望对您有所帮助。 如果您将成功解决此任务,请在此处描述您的经验。

===============>>#2 票数:0

问题是,行数极高或为一。 这是我的代码:

#define red 10, 180, 180, 25, 255, 255

    void SetScalars(int h1, int s1, int v1, int h2, int s2, int v2){
        color_min = Scalar(h1, s1, v1);
        color_max = Scalar(h2, s2, v2);
    }

    void triangles(){
    ToHSV();
    SetScalars(red);
    Thresh();
    Mat dst = frame.clone();
    vector<vector<Point>> contours;
    blur(frame_thresh, frame_thresh, Size(3, 3));
    MSER(15,250,1000,0.15)(frame_thresh, contours);
    // Find the convex hull object for each contour
    vector<vector<Point> >hull(contours.size());
    for (int i = 0; i < contours.size(); i++)
    {
        int vtc = hull[i].size(); 
        convexHull(Mat(contours[i]), hull[i], false);
        approxPolyDP(Mat(contours[i]), hull[i], arcLength(Mat(contours[i]), true) * 0.1, true);
        cout << vtc << endl;
        if (vtc == 3){
            vector<double> cos;
            cos.push_back(angle(hull[i][0], hull[i][1], hull[i][2]));
            cos.push_back(angle(hull[i][1], hull[i][2], hull[i][0]));
            cos.push_back(angle(hull[i][0], hull[i][2], hull[i][1]));
            sort(cos.begin(), cos.end());
            double mincos = cos.front();
            double maxcos = cos.back();
            if (vtc == 3 && mincos > 0.4 && maxcos < 0.6){
                Rect r = boundingRect(contours[i]);
                Mat croppedImage = dst(r);
                imshow("detected triangle", croppedImage);
            }
        }
    }
    Mat drawing = Mat::zeros(frame_thresh.size(), CV_8UC3);
    for (int i = 0; i< contours.size(); i++)
    {
        drawContours(drawing, contours, i, Scalar(0,0,255));
        drawContours(drawing, hull, i, Scalar(255, 0, 255));
        int vtc = hull[i].size();
    }
    imshow("mser", drawing);
}

===============>>#3 票数:0

您正在寻找的是广义霍夫变换 ,它是霍夫变换的一般性,可以检测任意形状。 这样,您可以将形状指定为三角形。

OpenCV中有一个通用化Hough的实现: http : //docs.opencv.org/master/d7/dd4/classcv_1_1GeneralizedHough.html ,您可以使用setTemplate方法定义形状。

  ask by Jarosław Błażków translate from so

未解决问题?本站智能推荐:

1回复

在OpenCV 2.4.6中使用Hough变换检测/拟合圆

目的是检测图像中的5个白色圆圈。必须检测到圆圈的测试图像是此处显示的640x480 请在此处下载原始图像1280x1024 我正在使用不同的方法来评估各种圆形/椭圆形检测方法。 但是以某种方式,我无法修复我的简单霍夫变换代码。 它不会检测到任何圆圈。 我不清楚问题出在预处理步骤还
1回复

使用霍夫检测瞳孔的最佳参数? java opencv

--------------阅读下面的编辑---------------我试图在各种图像中检测瞳孔和虹膜的边缘。 我正在改变参数等,但我只能设法得到一个正确的虹膜/瞳孔轮廓,或者在背景中得到不必要的轮廓,或者根本没有。 是一些特定的参数,我应该尝试并获得正确的轮廓。 或者有没有办法可以将图
1回复

使用OpenCV在Objective-C ++中进行种子生长和霍夫圈

我正在使用Objective-C ++和OpenCV检测图像上的球。 我尝试使用HoughCircle转换,但未正确检测到球。 对我来说,参数似乎不适合该功能的描述。 Objective-C ++和C ++有什么不同? 这是我的代码和OpenCV函数的描述: 如果参数在我实现
1回复

Python OpenCV:从Hough Circle Detection中获取统计信息

我和一个同学正在通过图像处理技术在硬币柜台上工作。 我们使用两种方法将硬币识别为圆形。 一方面将组件与统计信息连接起来,另一方面进行霍夫变换。 CC w / Stats的优点是直接输出所有重要参数(例如,像素面积)。 但是,通过触摸图像中的硬币,CC的w / stats会变弱(无法正确识
1回复

opencv:在矩形检测中使用轮廓和Hough变换

我试图使用不同的方法检测灰度图像中的白色矩形:轮廓检测和霍夫变换。 不幸的是,我正在处理的图像有一些限制,即 图像中有许多功能,矩形不是唯一的功能 矩形可以合并到其他要素(例如,其中一个矩形边可以与长直线重叠) 矩形可以包含一些其他功能(例如,矩形内的字母,数字或一些
1回复

OpenCV cv2.HoughCircles检测在简单图片上给出不好的结果

我是opencv的新手,我正尝试使用HoughCircles进行圆检测,但是它给了我没有圆的地方,也没有检测到我想要的巨大的明显圆。 我尝试更改参数,但无法使其正常运行。 我究竟做错了什么? 原始图片: 阈值化后的图像: 坎尼用圆圈过滤: path=r"minima
1回复

opencv houghlines2线长是变短的方法

我有一条线,角度为205度,长度为77像素。 (通过sqrt(x ^ 2 + y ^ 2)找到)像这样。 在此图像上的测量值不正确,仅用于显示我的意思。 我正在像这样执行houghlines2: 我添加了一个for循环以确保检测到该行。 当lineLength为44时,我终于
1回复

OpenCV:使用霍夫圆变换检测虹膜

我是openCV的新手,但是我想创建虹膜识别程序。 尽管带有网络摄像头的系统可以检测到眼睛,但是它无法检测到圆形虹膜。 我正在使用霍夫圆变换。 但是,如果图像中的虹膜不够圆,系统将无法检测到它。 有什么解决办法吗? 使用的算法是霍夫圆变换。
3回复

在游戏小地图上检测小圆圈

我坚持这个问题就像20小时一样。 质量不是很好,因为在1080p视频上,小地图小于300px / 300px 我想在这张图片上检测到10个英雄圈子: 像这样: 对于背景删除,我可以使用: 英雄肖像圆半径在8到12之间,因为英雄肖像像21x21px。 有了
1回复

为什么HoughCircles在尝试检测虹膜时会返回0个圆圈?

我试图检测眼睛的虹膜,但HoughCircles返回0圈。 输入图像(眼睛)是: 然后我用这张图片做了以下事情: 所以最终的灰色图像看起来像这样: 我发现这个问题使用HoughCircles来检测和测量瞳孔和虹膜,但它对我没有帮助,尽管与我的问题相似。