OpenCV-Python Uygulamaları-4

    Salı, Temmuz 11, 2017 , , 0 Comments

    Kullanılan Sistem Özellikleri: Ubuntu 16.04 LTS, OpenCV 3.2, Python 3.5.2

    Hedefler

    OpenCV de mouse yardımı ile dinamik görüntü işleme uygulamaları
    Kendi ilkel Paint uygulamamızı yapmak
    Kullanılacak fonksiyonlar: cv2.setMouseCallback()

    Örnek Basit Bir Uygulama


    Bu örnek uygulamada; açılan panel üzerinde, çift tıklanılan herhangi bir noktada, bir daire çizen uygulama yapmayı öğreneceğiz.
    İlk olarak bir mouse kontrol fonksiyonu oluşturmamız gerekmektedir. Tanımlı bu mouse fonksiyonu herhangi bir mouse ile yapabildiğimiz sol tık, sağ tık, çift sol veya sağ tıklama işlemlerine müsaade etmektedir. Tanımlı bu fonksiyonun bütün durumlarının listelendiği tabloya erişmek için aşağıdaki kodu Python terminalinde çalıştırmanız yeterlidir.

    import cv2
    events = [i for i in dir(cv2) if 'EVENT' in i]
    print events
    

    Mouse kontrol fonksiyonu özel bir formata sahiptir ve kullanımı neredeyse her zaman aynıdır. Tek fark fonksiyonun ne yapacağı ile ilgilidir. Bizim uygulamamızda mouse kontrol fonksiyonu, panel üzerinde çift tıkladığımız herhangi bir noktaya bir daire çizecek.
    Hadi kodlara bir göz atalım. Kodun açıklamaları yorum şeklinde verilmiştir.

    import cv2
    import numpy as np
    # Mouse kontrol fonkisyonu(mouse callback function)
    def draw_circle(event,x,y,flags,param):
        if event == cv2.EVENT_LBUTTONDBLCLK:
            cv2.circle(img,(x,y),50,(255,0,0),-1)
    # Siyah bir panel oluştur ve fonksiyonu birleştir
    img = np.zeros((512,512,3), np.unit8)
    cv2.nameWindow('image')
    cv2.setMouseCallback('image',draw_circle)
    
    while(1):
        cv2.imshow('image' , img)
        if cv2.waitKey(20) & 0xFF == 27:
            break
    cv2.destroyAllWindows()
    
    Oluşturduğunuz daireler ile çizeceğiniz şahaser sizin hayal dünyanızın genişliğine kalmış. Benim hayal gücüm mü??? işte aşağıda:

    Haydi Biraz Daha Eğlenelim


    Şimdi biraz daha eğlenceli bir uygulama yapalım. Bu uygulamada dikdörtgenler veya daireler çizeceğiz.(Seçtiğimiz mod'a bağlı olarak.)
    -Bitti mi?
    -Tabi ki hayır.
    Aynı zamanda mouse sol tuşunu basılı tutup hareket ettirdiğimiz zaman görüntü oluşturarak ilerlemeye devam edecek. Bu uygulama bize bazı interaktif görüntü işleme işlerini anlamada ve onları oluşturmada açıklayıcı olacak.
    import cv2
    import numpy as np
    drawing = False # Eğer mouse'a tıklandı ise: true 
    mode = True # Eğer True ise, dikdörtgen çiz. 'm' tuşu mod değişimi için tanımlı
    ix,iy = -1,-1
    # Mouse kontrol Fonksiyonunu Çağırıyoruz(mouse callback function)
    def draw_circle(event,x,y,flags,param):
        global ix,iy,drawing,mode
        if event == cv2.EVENT_LBUTTONDOWN:
            drawing = True
            ix,iy = x,y
        elif event == cv2.EVENT_MOUSEMOVE:
            if drawing == True:
                if mode == True:
                    cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
                else:
                    cv2.circle(img,(x,y),5,(0,0,255),-1)
        elif event == cv2.EVENT_LBUTTONUP:
            drawing = False
            if mode == True:
                cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv2.circle(img,(x,y),5,(0,0,255),-1)
    

    Şimdi mouse kontrol fonksiyonunu(mouse callback function) OpenCV penceresine entegre edeceğiz. Ana döngüde mod değişimi için bir tuş atayacağız. Böylece istediğimiz şekli bir pencerede çizdirebileceğiz.

    import cv2
    img = np.zeros((512,512,3), np.uint8)
    cv2.namedWindow('image')
    cv2.setMouseCallback('image',draw_circle)
    while(1):
        cv2.imshow('image',img)
        k = cv2.waitKey(1) & 0xFF
        if k == ord('m'): # Mod değişimi tuşunun ataması 
            mode = not mode
        elif k == 27:
            break
    cv2.destroyAllWindows()
    Evet yukarıdaki kod bloğu yardımı ile kendi ilkel Paint programımızı yapmış bulunduk. Ben örnek olması için sadece daire ve dikdörtgen çizimini gösterdim. Daha önceki uygulamalarımızda düz çizgi, üçgen, poligon vb geometrik şekillerin işlenmesi uygulamasını yapmıştık. Eğer isterseniz siz diğer şekilleri programa entegre ederek tam teşekküllü bir Paint programına sahip olabilirsiniz.
     Çok popüler olan programların özünde bu kadar basit olması şaşırtıcı değil mi? Bu arada ikinci programın örnek çıktısı aşağıda. Ve evet biliyorum çok aptalca bir çizim.

    Kaynak dosyaları ve Resimleri indirmek için: TIKLAYINIZ
    Kaynakça:  http://docs.opencv.org/3.2.0/

    0 yorum: