2012-07-17 15 views
6

Kağıdın üzerindeki 4 siyah kareyi algılamanın en iyi yolunu bulmaya çalışıyorum ve kağıdı kendi görüntüsünde yalıtmak için kullanıyorum.OpenCV kullanarak kağıt üzerindeki kayıt işaretlerini nasıl tespit edebilirim?

enter image description here

+0

StackOverflow'a Hoş Geldiniz. Şu ana kadar ne denedin, bu senin için çalışmıyor mu? Yardımcı olup olmadığını görmek için [bu soru] 'na (http://stackoverflow.com/q/11424002/62576) baktınız mı? Lütfen bunu kendiniz çözmek için bir çaba gösterin (bir resim göndermekten başka) ve buradaki bir kişi muhtemelen yardımcı olabilir. –

cevap

6

sizin görüntü üzerinde sadece 4 siyah kareler var bu yüzden yapmanız gereken şey olduğunu gibi görünüyor: griler

  • Do eşiği için

    1. dönüştürme görüntü
    2. siyah hatlarını bul (OpenCV'de bunu yapmadan önce, görüntünüzü tersine çevirmelisiniz, çünkü varsayılan olarak OpenCV beyaz konturları bulur)
    3. Bu konturlar boyunca dolaşın ve boundin'i bulun g dikdörtgen. (Benim soultion o A) Dikdörtgenin alanı benim çözümde (bazı sabit o Dikdörtgenin genişlik/yükseklik yakın 1.0)

      B) oldu büyüktür

      oldu:
    4. kontrol yap [0.9, 1.1] aralık)

    kodu:

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

    Sonuç: enter image description here

    Ayrıca this SO discussion okumak - 4 kareler kağıdı algılamada Buna ihtiyacım yok.

  • İlgili konular