2012-07-17 9 views
6

Próbuję znaleźć najlepszy sposób, aby wykryć 4 czarne kwadraty na papierze i użyć ich do wyizolowania papieru na jego własny obraz.Jak wykrywać znaczniki rejestracji na papierze za pomocą OpenCV?

enter image description here

+0

Witamy w StackOverflow. Czego próbowaliście dotychczas, to nie działa? Czy spojrzałeś na to pytanie (http://stackoverflow.com/q/11424002/62576), aby sprawdzić, czy to pomaga? Proszę pokazać trochę wysiłku, aby rozwiązać to samodzielnie (inne niż publikowanie obrazu), a ktoś tutaj może prawdopodobnie pomóc. –

Odpowiedz

6

Wydaje się, że na obrazie są tylko 4 czarne kwadraty tak, co trzeba zrobić, to:

  1. Konwersja obrazu do szarości progowych
  2. Do
  3. Znajdź czarne kontury (przed zrobieniem tego w OpenCV musisz odwrócić swój obraz, ponieważ domyślnie OpenCV znajduje białe kontury)
  4. Przechodzi przez te kontury i znajduje granicę g prostokąt.
  5. Czy czek:

    A) obszar prostokąta jest większy, że część stała (w moim rozwiązanie było)

    B) prostokąta szerokość/wysokość wynosi blisko 1,0 (w moim soultion to było [0,9, 1,1] zakres)

Kod:

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

Wynik: enter image description here

przeczytać również this SO discussion - nie trzeba, że ​​4 kwadraty wykryć papier.

Powiązane problemy