2012-07-17 10 views
6

Ich habe versucht, den besten Weg zu finden, die 4 schwarzen Quadrate auf dem Papier zu erkennen und sie zu verwenden, um das Papier in seinem eigenen Bild zu isolieren.Wie kann ich mit OpenCV Registrierungsmarkierungen auf Papier erkennen?

enter image description here

+0

Willkommen bei StackOverflow. Was hast du bisher versucht, das funktioniert nicht für dich? Haben Sie [diese Frage] (http://stackoverflow.com/q/11424002/62576) angeschaut, um zu sehen, ob es hilft? Bitte zeigen Sie etwas Mühe, um dies selbst zu lösen (außer ein Bild zu posten), und jemand hier kann wahrscheinlich helfen. –

Antwort

6

Es scheint, dass auf dem Bild gibt es nur vier schwarze Quadrate so, was Sie tun müssen, ist:

  1. Convert Bild zu Grau
  2. Do Schwelle
  3. schwarzen Konturen finden (Bevor Sie dies in OpenCV tun, müssen Sie Ihr Bild invertieren, da OpenCV standardmäßig weiße Konturen findet)
  4. Durch diese Konturen hindurchgehen und gefundene Grenzen finden g Rechteck.
  5. Sie das Kontroll:

    A) Rechtecks ​​des Bereich ist größer, dass eine Konstante (in meiner Lösung war es)

    B) Rechteck der Breite/Höhe in der Nähe von 1,0 ist (in meiner soultion war es [0,9, 1,1] Bereich)

Der Code:

Mat img = imread("test.jpg"), gray; 
vector<Vec4i> hierarchy; 
vector<vector<Point2i> > contours; 
cvtColor(img, gray, CV_BGR2GRAY); 
threshold(gray, gray, 100, 255, THRESH_BINARY); 
bitwise_not(gray, gray); 

findContours(gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); 

for(size_t i=0; i<contours.size(); i++) 
{ 
    Rect rect = boundingRect(contours[i]); 
    double k = (rect.height+0.0)/rect.width; 
    if (0.9<k && k<1.1 && rect.area()>100) 
    { 
     drawContours(img, contours, i, Scalar(0,0,255)); 
    } 
} 

imshow("result", img); 
waitKey(); 
Ergebnis

: enter image description here

Lesen Sie auch this SO discussion - Sie brauchen nicht, dass 4 Quadrate Papier zu erkennen.

Verwandte Themen