【问题标题】:detect blue line with if statement用 if 语句检测蓝线
【发布时间】:2016-05-09 20:37:49
【问题描述】:

我使用 OpenCV 和 Houghlines(在 c++ 中)制作了一条蓝线,我想知道在 if 语句中应该包含什么来检测蓝线是否存在以及它是否确实执行了操作。

我尝试使用 cv::inRange 函数来检测蓝色,但我无法在 if 语句中使用它。

这是绘制蓝线的代码:

         vector<Vec2f> lines;
         HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 ); 

        for(size_t i = 0;i < lines.size();i++)
         {
            float rho = lines[i][0], theta = lines[i][1];

            //scan only for horizontal line)
            if(theta > CV_PI/180*80 && theta < CV_PI/180*100){

            Point pt1, pt2;
            double a = cos(theta), b = sin(theta);
            double x0 = a*rho, y0 = b*rho;
            pt1.x = cvRound(x0 + 1000*(-b));
            pt1.y = cvRound(y0 + 1000*(a));
            pt2.x = cvRound(x0 - 1000*(-b));
            pt2.y = cvRound(y0 - 1000*(a));

            //draw the line in blue
            cvLine(m_image, pt1, pt2, Scalar(255,0,0), 3, CV_AA);
            }
        }
    }

基本上我想做的是

if (blue line exists) {
     do something
}

这是我得到的当前图像。 (忽略绿线和红线,它基本上是路上汽车的POV)我想检测蓝线何时进入图像的下部(在图片的正前方)然后执行动作(使汽车停止)

POV of the car

感谢您的宝贵时间。

PS。谢谢Saransh Kejriwal,我现在正在尝试使用国旗。

【问题讨论】:

  • 最终图像会是什么样子?除了画线的位置之外,图像是否可以在像素处具有相似的颜色?
  • 我添加了正在分析的图片,谢谢!

标签: c++ opencv


【解决方案1】:

您可以按照以下两种方式进行操作:

1) 绘制蓝线时设置标志:

每次绘制蓝线时,设置 int flag=1。

drawline();
flag=1;

这可以在 'if' 条件中检查。所以当 flag 为 1 时,这意味着你之前已经画了一条蓝线。如果它符合您的要求,它会更整洁。

2) 设计蓝色滤光片 如果您在调用“if”语句之前已经画了蓝线,这是您遵循的算法, - 使用 inRange 设计一个蓝色蒙版,并将蒙版保存在不同的 Mat 对象上(Mat 蒙版;) - 在面具上应用 findContours。检查您获得的每个轮廓的轮廓区域。 - 如果你画了一条线,其中一个轮廓会有很大的面积,那么你可以应用 if 条件为:

if(contourArea(contours[i])>some_threshold_value)
{
     //your code here
}

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2016-08-31
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    相关资源
    最近更新 更多