Skip to main content

Resim Transformasyonları

OpenCV'de Çok Kullanılan 5 Fonksiyon

OpenCV, görüntü işleme ve bilgisayar görüşü uygulamaları için geniş bir fonksiyon yelpazesi sunar. Bu bölümde, bu kütüphanenin en çok kullanılan beş fonksiyonunu ve bunların nasıl kullanılacağını inceleyeceğiz.

1. Görüntü Okuma

OpenCV ile bir görüntüyü okumak için imread fonksiyonunu kullanırız. Bu fonksiyon, görüntü dosyasının yolunu argüman olarak alır ve bir matris (görüntü) döndürür.

img = cv.imread('../Resources/Photos/park.jpg')
cv.imshow('Park', img)

Görüntü yüklemek ve göstermek bu kadar basittir. Eğer dosya bulunamazsa, imread None döndürür.

2. Gri Tonlamaya Çevirme

Görüntüleri gri tonlamaya çevirmek, çoğu görüntü işleme görevinin ilk adımıdır. cvtColor fonksiyonu bu dönüşümü gerçekleştirmek için kullanılır.

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)

Bu fonksiyon, bir görüntüyü herhangi bir renk uzayından başka bir renk uzayına dönüştürebilir, ancak en yaygın kullanımı BGR'den gri tonlamaya dönüşümdür.

3. Bulanıklaştırma

Bulanıklaştırma (Blurring), görüntüdeki gürültüyü azaltmak ve detayları yumuşatmak için kullanılır. GaussianBlur fonksiyonu bu amaçla sıklıkla kullanılır.

blur = cv.GaussianBlur(img, (7,7), cv.BORDER_DEFAULT)
cv.imshow('Blur', blur)

Bulanıklaştırma çekirdeğinin boyutu (burada 7x7), bulanıklık derecesini belirler.

4. Kenar Tespiti

Canny kenar dedektörü, bir görüntüdeki kenarları tespit etmek için kullanılır. Canny fonksiyonu, bu işlemi gerçekleştirir.

canny = cv.Canny(blur, 125, 175)
cv.imshow('Canny Edges', canny)

Burada, bulanıklaştırılmış görüntüyü kullanmak, yanlış pozitifleri azaltmaya yardımcı olur.

5. Görüntü Genişletme ve Erozyon

Görüntü genişletme, görüntüdeki beyaz alanları genişletirken, erozyon beyaz alanları daraltır. dilate ve erode fonksiyonları bu işlemleri yapar.

dilated = cv.dilate(canny, (7,7), iterations=3)
cv.imshow('Dilated', dilated)

eroded = cv.erode(dilated, (7,7), iterations=3)
cv.imshow('Eroded', eroded)
İpucu

Genişletme ve erozyon, morfolojik operasyonlar olarak bilinir ve görüntüler üzerinde çeşitli şekil işleme görevlerinde kullanılır.

Bu fonksiyonlar, OpenCV'nin görüntü işleme kabiliyetlerinin sadece bir kısmını temsil eder, ancak bilgisayar görüşü projelerinde sıklıkla kullanılırlar.

Resim Transformasyonları

Çeviri

Çeviri, bir görüntüyü x ve y koordinatları boyunca kaydırmak anlamına gelir. Bu işlemi translate fonksiyonu ile gerçekleştirebiliriz.

def translate(img, x, y):
transMat = np.float32([[1,0,x],[0,1,y]])
dimensions = (img.shape[1], img.shape[0])
return cv.warpAffine(img, transMat, dimensions)

translated = translate(img, -100, 100)
cv.imshow('Translated', translated)

Bu fonksiyon, resmi sağa veya sola (x), yukarı veya aşağı (y) kaydırır.

Döndürme

Bir görüntüyü belirli bir açıda döndürmek için rotate fonksiyonunu kullanırız. Bu işlem, belirli bir pivot noktası etrafında görüntünün döndürülmesini sağlar.

def rotate(img, angle, rotPoint=None):
(height, width) = img.shape[:2]
if rotPoint is None:
rotPoint = (width // 2, height // 2)
rotMat = cv.getRotationMatrix2D(rotPoint, angle, 1.0)
dimensions = (width, height)
return cv.warpAffine(img, rotMat, dimensions)

rotated = rotate(img, -45)
cv.imshow('Rotated', rotated)

Döndürme işlemi, görüntüyü verilen açı kadar döndürür. İsteğe bağlı bir döndürme noktası belirleyebilirsiniz; aksi takdirde görüntünün merkezi kullanılır.

Yeniden Boyutlandırma

Görüntüleri yeniden boyutlandırmak, boyutlarını değiştirmemize olanak tanır. Bu, resize fonksiyonu ile yapılır.

resized = cv.resize(img, (500,500), interpolation=cv.INTER_CUBIC)
cv.imshow('Resized', resized)

Interpolasyon, yeniden boyutlandırma sırasında piksel değerlerinin nasıl hesaplanacağını belirler. cv.INTER_CUBIC, daha yüksek kaliteli sonuçlar için kullanılan bir interpolasyon yöntemidir.

Yansıtma

Bir görüntüyü yatay veya dikey olarak yansıtmak için flip fonksiyonunu kullanırız.

flip = cv.flip(img, -1)
cv.imshow('Flip', flip)

flip fonksiyonunun ikinci parametresi yansıtma modunu belirler: 0 dikey yansıtma, 1 yatay yansıtma, -1 hem yatay hem dikey yansıtma anlamına gelir.

Kırpma

Görüntü kırpma, bir görüntünün belirli bir bölümünü almak için kullanılır. Python dilindeki dilimleme (slicing) işlemi ile bu kolaylıkla gerçekleştirilebilir.

cropped = img[200:400, 300:400]
cv.imshow('Cropped', cropped)

Kırpma işlemi, görüntü matrisinin ilgili bölümünü alır.

İpucu

Bu transformasyonlar, birçok görüntü işleme ve bilgisayar görüşü uygulamasında temel işlemlerdir. Uygulamanızın gereksinimlerine göre bu işlemleri birleştirebilir ve modifiye edebilirsiniz.

Kenar Tespiti

Kenar tespiti, görüntülerdeki nesnelerin sınırlarını bulma işlemidir. Bu, görüntü işleme ve bilgisayar görüşü uygulamalarında yaygın olarak kullanılan bir tekniktir. Bu bölümde, OpenCV kullanarak kenar tespiti nasıl yapılır ve bulunan kenarlar nasıl görselleştirilir detaylıca incelenecektir.

Gri Tonlama ve Bulanıklaştırma

Kenar tespitini başlatmadan önce, görüntüyü gri tonlamaya çeviririz ve gürültüyü azaltmak için bulanıklaştırırız. Bu, kenar tespiti algoritmasının daha doğru sonuçlar vermesine yardımcı olur.

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('Gray', gray)

blur = cv.GaussianBlur(gray, (5,5), cv.BORDER_DEFAULT)
cv.imshow('Blur', blur)

Gri tonlama, renkli görüntüyü tek bir yoğunluk kanalına indirger, böylece algoritma kenarları daha kolay tespit edebilir. Bulanıklaştırma ise görüntüdeki rastgele gürültüyü azaltır.

Canny Kenar Tespiti

Canny kenar tespiti algoritması, görüntüdeki kenarları belirlemek için kullanılır. Bu yöntem, yüksek ve düşük eşik değerleri arasındaki gradyanları kullanarak kenarları tespit eder.

canny = cv.Canny(blur, 125, 175)
cv.imshow('Canny Edges', canny)

Burada, blur filtresi uygulanan görüntüyü Canny fonksiyonuna veririz. Eşik değerleri (125 ve 175), kenarların ne kadar güçlü olması gerektiğini belirler.

Kontur Bulma

Kenarları tespit ettikten sonra, findContours fonksiyonu kullanarak görüntüdeki konturları bulabiliriz. Konturlar, bir nesnenin sınırlarını takip eden noktalar dizisidir.

contours, hierarchies = cv.findContours(canny, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
print(f'{len(contours)} contour(s) found!')

RETR_LIST modu tüm konturları alır ve hiyerarşi ilişkilerini yok sayar. CHAIN_APPROX_SIMPLE yöntemi, konturları oluşturan noktaları sıkıştırarak bellek kullanımını azaltır.

Kontur Çizimi

Bulunan konturları görselleştirmek için, her bir konturu boş bir görüntü üzerine çizebiliriz.

cv.drawContours(blank, contours, -1, (0,0,255), 1)
cv.imshow('Contours Drawn', blank)

Bu kod, tüm konturları kırmızı renkle ((0,0,255)) ve 1 piksel kalınlığında çizer. -1, tüm konturların çizileceğini belirtir.

İpucu

Kenar tespiti ve kontur bulma işlemleri, nesne algılama ve görüntü segmentasyonu gibi birçok gelişmiş görüntü işleme görevinde kullanılabilir.

Bu yönergeler, OpenCV ile kenar tespiti ve kontur bulma işlemlerinin temellerini kapsar. Uygulamanızın gereksinimlerine göre bu teknikleri ayarlayabilir ve geliştirebilirsiniz.