Opencv-Python Uygulamaları-6

Çarşamba, Ağustos 30, 2017 , , , 0 Comments

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

Hedefler:

Görüntü özelliklerine erişim
Görüntüler için sınırlar oluşturma(Padding)

Kullanılacak Fonksiyonlar:
cv2.copyMakeBorder()

Görüntünün etrafında bir fotoğraf çerçevesi(frame) oluşturmak istiyorsanız; cv2.copyMakeBorder() fonksiyonunu kullanabilirsiniz. Konvülasyon, zero padding gibi işlemleri de yine aynı fonksiyon yardımı ile gerçekleştirebilirsiniz. Fonksiyonun iç yapısına bir göz atacak olursak:

src: görüntü girdisi(input)
top,bottom,left,right sınır piksellerinin değer aralıkları
borderType: İşaret(flag)'in nasıl olacağı ile ilgili parametreler. Aşağıdaki gibi devam edebilir.
cv2.BORDER_CONSTANT : Sabit renkli çerçeve ekler. Değerin hemen bir sonraki parametrede belirtilmesi gerekmektedir.
cv2.BORDER_REFLECT : Sınırlar ayna(mirror) efekti eklenerek belirtilir. Örneğin: abc|cba gibi
cv2.BORDER_DEFAULT : Mirror efekti gibi çalışır sınırları ilk tanımlı haline döndürür.
cv2.BORDER_REPLICATE : Son element kopyalanır,çoğaltılır(replicate). Örneğin: abc|ccccc
cv2.BORDER_WRAP : Son elemanı keser(wrapping)
value: Sınırın(Border) tipinin değerini gösterir.

Hadi tüm bu parametreleri daha iyi anlayabilmek için hepsini bir örnek içinde test edelim.
import cv2
import numpy as np
from matplotlib import pyplot as plt

# Matplotlib Modülünü Kurmayı Unutmayınız!!!

BLUE = [255,0,0]
res1= cv2.imread('opencv1.png')

# Kullanılan Parametreler:

replicate = cv2.copyMakeBorder(res1,15,15,15,15,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(res1,15,15,15,15,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(res1,15,15,15,15,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(res1,15,15,15,15,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(res1,15,15,15,15,cv2.BORDER_CONSTANT,value=BLUE)

# Subplotların Atamaları İçin:

plt.subplot(231),plt.imshow(res1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()

Örnek resim olarak; dersler için kullandığımız resmi kullandığımızda aşağıdakine benzer bir çıktı almamız gerekmektedir. Parametreleri değiştirerek sonuçlarını gözlemleyebilirsiniz. İyi eğlenceler

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

0 yorum:

Mağaradakiler

Pazartesi, Ağustos 07, 2017 , , , , 1 Comments


Uzunca bir süre bekledim. Nitekim avcının iyisi en hızlı olan değil, sabretmesini bilendir diye okumuştum bir yerlerde. Sanırım bir ayrıntıyı gözden kaçırmışım, çok beklemek iyi fırsatları tepmek anlamına geliyormuş. Yazının başlığı Cemil Meriç'ten alıntı. O da zaten Eflatun'un ünlü metaforuna gönderme yapmış. Mağara önemli bir kavram anlayacağınız.

Bugün tesadüf eseri (bir elektronik mühendisi olarak tesadüflere inanmam ama kelime karşılığı bu oluyor programlamadaki random fonksiyonunun) Cem SEYMEN'in "Para Detektifi" adlı programına denk geldim. Gelecek ile alakalı herkesin aklındaki soruları soruyor, yetmiyor bir de cevaplarının peşine düşüyor. Güzel bir program anlayacağınız. Program sırasında, yeni kurulmuş girişimlere ve ne yaptıklarına değinilirken; çokta yeni kurulmuş sayılmayacak bir firmanın aşırı iyiyiz, iddialıyız lafları dikkatimi çekti ve ne yaptıklarını merak ettim. Özetle bir görüntü işleme işi ile meşguller.

Dünyanın en iyisi olduklarını iddia ediyorlardı ama yaptıkları sunum sırasında kullandıkları yazılımın filigranı(watermark) görülüyordu. Anlayacağınız hazır bir demo'yu almışlar ve lisans ücretini bile ödememişler ki filigran kaldırılsın. Cem SEYMEN bu işin uzmanı değil ama bu firmanın devletten hibe alması ve melek yatırımcı bulması beni gerçekten şaşırttı. Sebep?

Projemin şekli bir kusurdan dolayı. Yani proje raporunun soldan bir parmak, sağdan iki parmak boşluk kuralı gibi bir kurala( Ya da tam tersi miydi?) uymamasından dolayı hibe programına seçilmemesinin üstünden çok zaman geçmedi. Çok bekledim ama sanırım avım beklediğimden daha hızlı geçti önümden. Geriye dönüp bakınca insan gerçekten hayret ediyor. Bu kadar fırsatı kaçırmayı nasıl başardım diye. Arada güzel şeyler de olmuyor değil. Mesela Arçelik-Ettom işbirliği ile yapılan yarışmada projemiz birinci oldu. Az kalsın bu yarışmaya da katılmayacaktım ya orası da ayrı bir mevzu.
Projenin videosu:


Her gün yeni şeyler öğreniyoruz, öğreniyorum. Öğrenmek kadar uygulamakta önemli bir olay. Hatta az öğrenip, hemen uygulamak en doğrusu sanırım. Çağımızın vebası, zaman. En zenginin de, en fakirin de sadece ama sadece günlük 24 saati var. Para ile her şeyi satın alabiliriz ama zamanı değil.

Değişikliklerden korkmamak gerekiyor. Değişim kaçınılmaz. Türümüzün devamını en güçlüler, en zenginler, en zekiler değil değişime en iyi adapte olanlar sağlıyor. Bizi bekleyen hayatı kabullenebilmemiz için, planladığımız hayattan vazgeçmemiz gerekiyor. Madem mağaralardan bu kadar bahsettim. Kapanışı da yine bir mağara ile ilgili Star Wars'un yodası Joseph CAMPBELL özdeyişi ile bitireyim.

"Girmeye Korktuğunuz Mağara, Aradığınız Hazineyi Barındırır."

1 yorum:

OpenCV-Python Dersleri

Çarşamba, Ağustos 02, 2017 , , 8 Comments

OpenCV-Python Dersleri:


8 yorum:

OpenCV-Python Uygulamaları-5

Çarşamba, Ağustos 02, 2017 , , 0 Comments


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

Hedefler

Değer Çubuğu ("TrackBar" ifadesi için bildiğim en doğru karşılık bu, daha doğrusu için bilgilendirirseniz sevinirim.) 'nu OpenCV pencerelerine bağlamayı öğreneceğiz.
Kullanılacak Fonksiyonlar: cv2.getTrackbarPos(), cv2.createTrackbar()

Örnek uygulamamızda, belirttiğimiz rengi gösteren basit bir işlem yapacağız. BGR (Blue,Green,Red) renklerini gösteren, her bir renk için ayrı bir değer çubuğumuz(trackbar) olacak. Çubuğu hareket ettirmemiz ile birlikte renk paletinde değişim gözlenecek. Başlangıç rengi olarak siyah atanacak.

cv2.getTrackbarPos() fonksiyonu için, ilk argüman değer çubuğuna(trackbar) verilecek isim, ikincisi açılacak pencereye verilecek isim, üçüncü argüman; varsayılan(default) değeri, dördüncü argüman, maksimum değer, beşinci argüman ise callback(geri çağırma) fonksiyonun değeridir. Geri çağırma fonksiyonu her zaman bir varsayılan(default) değere sahiptir. Bizim örnek uygulamamızda ise yaptığı spesifik bir iş olmadığından başlangıç değerini geçiyoruz.

Bir başka önemli uygulama noktası ise değer çubuğunu bir buton veya anahtar(switch) gibi kullanmaktır. OpenCV varsayılan(default) olarak bir buton fonksiyonuna sahip değildir. O yüzden track bar bir buton gibi kullanılabilir.


import cv2
import numpy as np

def nothing(x):
    pass

# Siyah bir görüntü oluştur:

img = np.zeros((300,512,3),np.uint8)
cv2.namedWindow('image')

# Değer Çubuğu(Track Bar) Oluştur:

cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)

# Anahtar(Switch) Oluştur: AÇ/KAPA özelliği için:

switch = 'O : KAPA \n1: AC'
cv2.createTrackbar(switch, 'image',0,1,nothing)

while(1):
     cv2.imshow('image',img)
     k = cv2.waitKey(1) & 0xFF
     if k ==27:
         break

# Oluşturulan Dört Değer Çubuğunun Anlık Durumlarını Tutmak İçin:

     r = cv2.getTrackbarPos('R', 'image')
     g = cv2.getTrackbarPos('G', 'image')
     b = cv2.getTrackbarPos('B', 'image')
     s = cv2.getTrackbarPos('switch', 'image')

     if s == 0:
         img[:] = 0
     else:
         img[:] = [b,g,r]

cv2.destrowAllWindows()

Uygulamanın çıktısı aşağıdaki gibidir. Değer çubuğu ile istediğiniz rengi elde edebilirsiniz. İyi Eğlenceler..
Kaynakça:  http://docs.opencv.org/3.2.0/
Kaynak dosyaları ve Resimleri indirmek için: TIKLAYINIZ

0 yorum: