İkinci Ders
Ders İçeriği
- Resim Dönüşümleri
- OpenCV üzerinde kullanılan önemli Fonksiyonlar
- Kontür Tespiti
1. Resim Dönüşümleri
Resim dönüşümleri, bir resmin boyutunu, perspektifini, rotasyonunu veya konumunu değiştirmek için kullanılır. OpenCV, bu dönüşümleri gerçekleştirmek için bir dizi fonksiyon ve algoritma sağlar.
1.1. Renk Skalasını Değiştirme
OpenCV içerisinde resimleri okuduktan sonra nasıl bir renk skalasına sahip olacağını değiştirebiliriz. Bu işlemleri bir önceki derste de gördüğümüz üzere cvtColor
methodu ile gerçekleştirebiiriz. İçerisine ilk olarak değiştirmek istediğimiz resmin ne olduğunu sonrasında da neye dönüştürmek istediğimizi yazarız. Altta birkaç örnek ifade edilmiştir.
image = cv2.imread("resim.jpg") # resmi oku
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # RGB görüntüyü gri tonlamaya dönüştür
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # RGB görüntüyü HSV renk uzayına dönüştür
1.2. Resim Boyutlarını Değiştirme
Opencv ile görüntülerin boyutlarını değiştirebiliriz. İlk olarak shape
methodunu kullanarak okuduğumuz resmin boyutunu öğrenebiliriz.
resminBoyutu = image.shape
Sonrasında bu boyutu birkaç şekilde değiştirebiliriz. Bu değişiklikleri OpenCV içerisinde bulunan resize
methodu ile gerçekleştiririz. Bu fonksiyon içerisine ilk olarak boyutunu değiştirmek istediğimiz resmi sonrasında da yeni boyutları istemektedir.
img =cv2.resize(image,(1300,275))
Aynı zamanda oransal olarak da büyütme küçültme işlemlerini yapabiliriz. Bu işlem için alt kısımdaki gibi bir yapı kullanmamız gerekmektedir.
new_img =cv2.resize(image,(0,0),image,w_ratio,h_ratio)
1.3. Rotosyon Değiştirme
OpenCV üzerinde resimlerin yönünü de değiştirebiliriz. Bu değişimi yapmak için flip
methodunu kullanırız. Bu method içerisine ilk olarak değiştirmek istediğimiz resmi sonrasında da hangi eksende döndürmek istediğimizi girmemizi gerektirirr.
new_img = cv2.flip(new_img,0)
- 0: X ekseni Etrafında
- 1: Y ekseni Etrafında
- -1: Hem X hem Y ekseni Etrafında
2. OpenCV Üzerinde Kullanılan Önemli Fonksiyonlar
OpenCV ve görüntü işleme projelerinde çokça kullandığımız bazı fonksiyonlar bulunmaktadır. Bu fonksiyonları öğrenmek bu nedenle büyük önem arz etmektedir.
2.1. Resimleri Gri Renge Dönüştürme Fonksiyonu
OpenCV resimleri BGR formatında okur ancak bazı durumlarda biz resimlerimizdeki detayların daha yüksek oranda ortaya çıkması için gri tona dönüştürmek gerekebilir. Bu işlemi gerçekleştirmek için cvtColor
yapısını kullanabiliriz.
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
2.2. Resimleri Blurlaştırma
Resimleri nasıl blurlayabileceğimizi daha ilerde ayrıntılı olarak anlatacak olsak da temel olarak başlangıçta bilmemizde fayda vardır. Blurlaştırmak resmin kalitesini kötü etkiliyor bu nedenle kötü çıktılar verir gibi düşünebiliriz ancak blurlaştırma ile resim üzerindeki bazı kusurlardan kurtulunabilinir.
Blurlama işlemini detaylarına sonrasında gireceğimiz blur()
parametresi ile yapabiliriz. Bu method içeisine blurlanacak resmi ve blurlama miktarını almaktadır. Bulurlama miktarı tek sayılardan oluşan kare bir matris olmalıdır.
blur = cv.blur(img,(5,5))
2.3. Resimlerdeki Köşeleri Bulma
Görüntü işlemede çoğunlukla bir resmin içerisinden nesne tespit etmeye çalışırız. Bu tespit edeğimiz nesnenin kenarlarını algılamak o cismin fotoğraf içerisinde hangi konumda olduğunu anlamak için çok önemlidir. Kenar tespitinden de detaylıca bahsedecek olsak da kısaca Canny
fonksiyonunu kullanarak kenar tespiti yapabiliriz. Hatta içerisine blurlu ve blursuz fotoğraflar da koyarak denemeler yapabiliriz. Bu fonksiyon içerisine kenarlarını bulmak istediğimiz fotoğrafı ve
canny1 = cv2.Canny(img, 125, 175)
canny2 = cv2.Canny(blur, 125, 175)
2.4. Erosyon
Görüntülerde belirli bozunmalara neden olmak bazen pozitif etkilere sebep olabilir. Bu etkilerden biri de eresyona uğratmaktadır. Resimleri erode
fonksiyonunu kullanarak eresyona sokabiliriz.
erode = cv2.erode(canny2, (3,3), iterations = 1)
3. Kontür Tespiti
Bu başlığımızda OpenCV üzerinde kontürleri nasıl bulacağımızı öğrenceğiz. Kontürler nesnelerin kenarları olmaktadır. Bu kontürleri bulmak için birkaç işlem yapmamız gerekmektedir. Aynı gibi gözükse de matematiksel olarak kenarlardan farklılardır.
İlk olarak bir resim okuyarak başlayabiliriz
import cv2
img = cv2.imread("Photo/cats.jpg")
Sonrasında resmi gri skalaya çevirmemiz gerekmektedir.
gray = cv2.cvtColor(img, cv2.COLOR)
Sonrasında Canny ile şekilin kenarlarını tespit edebiliriz.
canny = cv2.Canny(img, 125, 175)
Sonrasında ilk kontür bulma işlemimizi yapabiliriz, bu işlemi yapmak için cv2.findCountours
methodunu kullanınırız. Bu method içerisine kontürünü bulmak istediğimiz resmi girereriz. Devamında da dış ve iç kontürler için methodları gireriz.
countours, hierarchies = cv2.findContours(canny, cv2.RETR_LIST, cv.CHAIN_APPROX_NONE)
Sonrasında bulunan contür sayısını ekrana yazdırabiliriz.
Belirli sayıda kontür bulduk hadi şimdi gri resmi blurlayarak deneyelim.
blur = cv2.GuassianBlur(gray, (5,5), cv2.BORDER_DEFAULT)
Şimdi yeniden çalıştırdığımızda daha iyi sonuçlar aldığımızı görüntüleyebiliriz.
OpenCV üzerinde bulduğumuz kontüleri görsel olarak da gösterebiliriz. Bu işlem için de drawContours
methodunu kullanabiliriz. Bu method içerisine ilk olarak nereye çizilmek istendiği yer almaktadır. Sonrasında kontürün bulumuş hali, bulunan kontürlerden hangisinin çizilmek istendiği (-1 ise tamamı), cizilecek kontürün rengi ve son olarak kalınlığı olmaktadır.
cv2.drawContours(img, contours, -1, (0,0,255), 3)