用if语句检测蓝线

时间:2016-05-09 09:59:00

标签: c++ opencv

我使用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,我现在正在尝试国旗。

1 个答案:

答案 0 :(得分:1)

您可以采用以下两种方式:

1)画一条蓝线时设置一个标志:

每当你画一条蓝线时,设置一个int flag = 1。

drawline();
flag=1;

这可以在&#39;中查看&#39;条件。因此,当flag为1时,这意味着您之前已经绘制了一条蓝线。如果它符合您的要求,它会更加整洁。

2)设计蓝色滤镜 如果您在拨打&#39; if&#39;之前已经绘制了蓝线。声明,这是你遵循的算法, - 使用inRange设计蓝色遮罩,并将遮罩保存在不同的Mat对象上(Mat mask;) - 在面具上应用findContours。检查您获得的每个轮廓的轮廓区域。 - 如果您绘制了一条线,其中一条轮廓将具有一个重要区域,那么您可以在条件为:

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