Ana içeriğe geç

İkinci Ders

Ders İçeriği

  1. Resim Dönüşümleri
  2. OpenCV üzerinde kullanılan önemli Fonksiyonlar
  3. 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)