Gereksinimler ve Ortam Kurulumu
Görüntü işleme projelerine başlamadan önce geliştirme ortamınızı doğru yapılandırmanız gerekir. Python 3.12 veya üzeri bir sürüm kullanmanız, modern kütüphanelerin performans özelliklerinden tam yararlanmanızı sağlar. Sanal ortam (virtual environment) kullanarak projeye özel bağımlılıkları yönetmek, paket çakışmalarını önlemek için en iyi pratiktir.
# Sanal ortam oluşturma
python -m venv goruntu_isleme_ortami
# Ortamı aktif etme (Windows)
goruntu_isleme_ortami\Scripts\activate
# Gerekli kütüphanelerin kurulumu
pip install opencv-python pillow numpy matplotlib
Yukarıdaki komutlar, görüntü işleme için temel taşları olan OpenCV (bilgisayarlı görü), Pillow (görüntü düzenleme), NumPy (matematiksel dizi işlemleri) ve Matplotlib (görselleştirme) kütüphanelerini sisteminize yükler.
Görüntü Yükleme ve Temel Manipülasyon
Görüntü işleme sürecinin ilk adımı, veriyi belleğe doğru bir şekilde yüklemektir. OpenCV, görüntüleri varsayılan olarak BGR (Blue-Green-Red) formatında okur; ancak çoğu kütüphane RGB formatını bekler. Bu nedenle, okuma sonrası renk uzayı dönüşümü yapmak kritik bir adımdır.
import cv2
import matplotlib.pyplot as plt
# Görüntüyü yükle
img = cv2.imread('ornek_resim.jpg')
# BGR'den RGB'ye dönüştür
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Görüntüyü ekrana yansıt
plt.imshow(img_rgb)
plt.axis('off')
plt.show()
Bu örnekte, cv2.imread fonksiyonu ile yerel bir dosyayı okuduk. Ardından cv2.cvtColor kullanarak renk uzayını standart RGB formatına çevirdik. plt.axis('off') komutu ise eksen çizgilerini kaldırarak görüntünün daha temiz görünmesini sağlar.
Görüntü Filtreleme ve Kenar Algılama
Görüntüdeki gürültüleri temizlemek veya nesne sınırlarını belirginleştirmek için filtreleme teknikleri kullanılır. Gaussian Blur, görüntüdeki yüksek frekanslı gürültüyü azaltırken, Canny kenar algılama algoritması bir nesnenin sınırlarını tespit etmek için kullanılır.
# Gri tonlamaya çevir
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Gürültü azaltma (Gaussian Blur)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# Canny kenar algılama
edges = cv2.Canny(blurred, 100, 200)
cv2.imwrite('kenarlar.jpg', edges)
Burada GaussianBlur, görüntüyü yumuşatarak kenar algılama aşamasında oluşabilecek yanlış pozitifleri engeller. Canny fonksiyonundaki 100 ve 200 değerleri, kenar tespiti için alt ve üst eşik değerlerini temsil eder.
Renk Uzayları ve Maskeleme
Belirli bir nesneyi arka plandan ayırmak için renk tabanlı maskeleme (segmentasyon) yöntemi kullanılır. Özellikle HSV (Hue, Saturation, Value) renk uzayı, ışık değişimlerine karşı RGB'den daha dayanıklı olduğu için bu işlem için tercih edilir.
import numpy as np
# HSV renk uzayına geçiş
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# Belirli bir renk aralığı tanımla (Örn: Mavi tonları)
alt_sinir = np.array([100, 150, 50])
ust_sinir = np.array([140, 255, 255])
# Maske oluştur
maske = cv2.inRange(hsv, alt_sinir, ust_sinir)
# Orijinal görüntü ile maskeyi birleştir
sonuc = cv2.bitwise_and(img, img, mask=maske)
inRange fonksiyonu, belirlenen aralıktaki pikselleri beyaz (255), diğerlerini siyah (0) yaparak bir maske oluşturur. bitwise_and işlemi ise bu maskeyi orijinal görüntüye uygulayarak sadece o renk aralığındaki nesneyi görünür kılar.
Görüntü İşleme Yöntemleri Karşılaştırma Tablosu
| Yöntem | Kullanım Amacı | Avantajı | Dezavantajı |
|---|---|---|---|
| Gaussian Blur | Gürültü Giderme | Detayları yumuşatır | Keskinliği azaltır |
| Canny Edge | Kenar Tespiti | Hızlı ve hassas | Eşik değerlerine duyarlı |
| HSV Maskeleme | Nesne Segmentasyonu | Renk bazlı ayırma | Aydınlatma değişimine hassas |
Görüntü Üzerine Metin ve Şekil Çizimi
İşlenmiş verileri görselleştirmek veya raporlamak için görüntü üzerine bilgi eklemek gerekebilir. OpenCV, putText ve rectangle gibi fonksiyonlarla bu işlemi kolaylaştırır.
# Dikdörtgen çiz
cv2.rectangle(img, (50, 50), (200, 200), (0, 255, 0), 3)
# Metin ekle
cv2.putText(img, 'Nesne Tespit Edildi', (50, 40),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 2)
cv2.imshow('Islenmis Gorsel', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(0) komutu, bir tuşa basılana kadar pencerenin açık kalmasını sağlar. destroyAllWindows ise işlem bittiğinde tüm pencereleri sistem belleğinden temizler.
Güvenlik Uyarısı: Kullanıcıdan alınan görselleri işlerken, dosya türü kontrolü yapmayı unutmayın. Zararlı içerik barındıran dosyaların işlenmesi, sisteminizde güvenlik açıklarına yol açabilir. Her zaman "Pillow" veya "OpenCV" gibi güvenilir kütüphanelerin güncel sürümlerini kullanarak bilinen zafiyetlerden korunun.
Sıkça Sorulan Sorular
OpenCV neden BGR kullanıyor?
OpenCV geliştirildiği yıllarda (1990'ların sonu), kamera üreticileri arasında BGR formatı yaygın bir standarttı. Bu tarihsel bir seçimdir; günümüzde RGB ile çalışmak için her zaman manuel dönüşüm yapmak gerekir.
Görüntü işleme için GPU kullanabilir miyim?
Evet, OpenCV'nin CUDA desteği bulunmaktadır. Ancak kurulumu daha karmaşıktır ve NVIDIA ekran kartı gerektirir. Küçük projeler için CPU yeterli olacaktır.
Görüntü işleme projelerinde hangi dosya formatı tercih edilmeli?
Kayıpsız sıkıştırma sağlayan PNG veya TIFF formatları, analiz süreçlerinde veri kaybını önlemek için JPEG'den daha uygundur.
Kütüphane güncellemelerini nasıl takip edebilirim?
Python paket yöneticisi olan 'pip' aracılığıyla pip list --outdated komutunu kullanarak yüklü kütüphanelerinizin güncel olup olmadığını kontrol edebilirsiniz.
Hata ayıklama (Debugging) için en iyi yöntem nedir?
Görüntü işleme süreçlerinde her aşamada cv2.imshow kullanarak ara sonuçları görselleştirmek, hatanın hangi filtreleme adımında oluştuğunu anlamanızı sağlar.
Görüntü İşleme Projelerinde Performans Optimizasyonu
Görüntü işleme süreçleri, özellikle yüksek çözünürlüklü videolarda veya gerçek zamanlı uygulamalarda ciddi işlemci ve bellek yükü oluşturur. Performansı artırmak için uygulayabileceğiniz temel stratejiler şunlardır:
- Görüntü Boyutlandırma (Resizing): İşlem yapmadan önce görüntüleri ihtiyacınız olan en küçük boyuta indirgemek, hesaplama süresini ciddi oranda düşürür.
- ROI (Region of Interest) Kullanımı: Görüntünün tamamını işlemek yerine, sadece üzerinde işlem yapacağınız bölgeyi (kırpılmış alan) seçmek kaynak kullanımını optimize eder.
- NumPy Vektörizasyonu: Döngüler (for/while) yerine NumPy'ın yerleşik matris işlemlerini kullanmak, Python tarafında 10 ila 100 kat arası hız artışı sağlayabilir.
Aşağıdaki örnekte, bir görüntünün tamamı yerine sadece belirli bir bölge üzerinde işlem yaparak performansın nasıl artırılacağı gösterilmiştir:
import cv2
import numpy as np
# Görüntüyü yükle
img = cv2.imread('ornek.jpg')
# ROI tanımlama: [y1:y2, x1:x2]
roi = img[100:300, 100:300]
# Sadece ROI üzerinde işlem yap (Örn: Gri tonlama)
gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
# İşlenmiş parçayı tekrar ana görüntüye yerleştir
img[100:300, 100:300] = cv2.cvtColor(gray_roi, cv2.COLOR_GRAY2BGR)
cv2.imshow('Optimize Edilmis Goruntu', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Alternatif Kütüphaneler ve İleri Seviye Araçlar
OpenCV standart bir kütüphane olsa da, özel ihtiyaçlar için farklı araçlar kullanmak projenizin başarısını artırabilir. İşte profesyonel projelerde tercih edilen bazı alternatifler:
| Kütüphane | Kullanım Alanı |
|---|---|
| Scikit-image | Bilimsel görüntü analizi ve istatistiksel işlemler için idealdir. |
| Pillow (PIL) | Görüntü formatı dönüştürme ve basit düzenlemeler için çok hızlıdır. |
| Dlib | Yüz tanıma ve nesne takibi (tracking) konusunda yüksek doğruluk sunar. |
Scikit-image ile Gelişmiş Gürültü Azaltma
OpenCV'nin sunduğu temel filtrelerin ötesine geçmek istediğinizde, scikit-image kütüphanesinin sunduğu "denoise" algoritmaları daha temiz sonuçlar verebilir:
from skimage import io, restoration
# Görüntüyü yükle
image = io.imread('gurultulu_resim.jpg', as_gray=True)
# Total Variation Denoising kullanarak gürültü temizleme
denoised_image = restoration.denoise_tv_chambolle(image, weight=0.1)
# Sonucu kaydet
io.imsave('temizlenmis_resim.jpg', denoised_image)
Bu yöntemler, özellikle tıbbi görüntüleme veya düşük ışıklı ortamlarda çekilen fotoğrafların işlenmesinde standart filtrelerden çok daha başarılı sonuçlar üretmektedir.
Sonuç
Python ile görüntü işleme dünyası, sadece birkaç satır kodla karmaşık analizler yapmanıza olanak tanır. Bu rehberde öğrendiğiniz temel teknikler (yükleme, filtreleme, maskeleme), daha ileri seviye konular olan derin öğrenme tabanlı nesne tanıma (YOLO, MediaPipe gibi) için gerekli olan altyapıyı oluşturur. Bir sonraki adım olarak, kendi veri setinizi oluşturup bu görüntüleri bir yapay zeka modeline nasıl besleyeceğinizi araştırmanızı öneririm.
Kod Güvenliği Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamında (production) kullanacağınız görüntü işleme servislerinde, kullanıcı verilerinin gizliliğine dikkat edin ve görüntüleri işlerken bellek yönetimini (memory management) optimize edin.


Yorumlar (0)
Yorum Yaz