2016-05-09 14 views
2

Ich habe eine blaue Linie mit OpenCV und Houghlines (in C++) gemacht und ich frage mich, was in eine if-Anweisung, die erkennen soll, ob die blaue Linie existiert und ob es eine führt Aktion.erkennen blaue Linie mit if-Anweisung

Ich versuchte mit der cv :: inRange Funktion, um das Blau zu erkennen, aber ich kann es nicht in der if-Anweisung verwenden.

Hier ist der Code die blauen Linien zu zeichnen:

  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); 
      } 
     } 
    } 

Und im Grunde, was ich will zu tun ist

if (blue line exists) { 
    do something 
} 

Dies ist das aktuelle Bild ich immer bin. (Ignoriere die grüne und rote Linie, es ist im Grunde POV von Auto auf der Straße) Ich vermute, wenn blaue Linie in den unteren Teil des Bildes (direkt vor dem Bild) bekommen, dann führen Sie die Aktion (machen das Auto Stopp)

POV of the car

Vielen Dank für Ihre Zeit.

PS. Danke Saransh Kejriwal, ich versuche es jetzt mit der Flagge.

+0

wie würde das fertige Bild aussehen? kann das Bild ähnliche Farben an anderen Pixeln haben als an der Linie, an der Sie zeichnen? –

+0

Ich habe das Bild hinzugefügt, das ich analysiere, danke! – Prime47

Antwort

1

Es gibt zwei Möglichkeiten, die Sie folgen können:

1) ein Flag, wenn Sie eine blaue Linie zeichnen:

Jedesmal, wenn man eine blaue Linie zeichnen, setzen Sie einen int-Flag = 1.

drawline(); 
flag=1; 

Dies kann in der 'if' Zustand überprüft werden. Wenn Flag 1 ist, bedeutet das, dass Sie früher eine blaue Linie gezeichnet haben. Es ist viel besser, wenn es Ihren Anforderungen entspricht.

2) entwerfen einen blauen Farbfilter Falls haben Sie die blaue Linie gezogen, bevor Sie den Aufruf sind ‚if‘ Anweisung, hier ist der Algorithmus, den Sie folgen, -design eine blaue Farbmaske mit InRange und sparen die Maske auf dem anderen Mat-Objekt (Mat-Maske;) - findContours auf Maske anwenden. Überprüfen Sie den Konturbereich jeder Kontur, die Sie erhalten haben. - Falls Sie eine Linie gezogen, einer der Konturen wird einen wesentlichen Bereich haben, dann können Sie sich bewerben, wenn die Bedingung als:

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