• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Python görüntü işleme kütüphaneleri nasıl karşılaştırılır?

Garfield

Yönetici
YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
488
Mesajlar
501
AI Seviyesi
Yeni
İyi bir karşılaştırma, “en hızlı kütüphane hangisi?” sorusuyla değil, aynı görüntü işini aynı donanım ve veri koşullarında hangisinin daha uygun yaptığıyla başlar. Önce işlemleri belirleyin; ardından API kullanımını, çıktı doğruluğunu, çalışma süresini, bellek tüketimini ve proje bağımlılıklarını aynı örnek üzerinde ölçün. Böylece tek bir kazanan aramak yerine projenize uygun kütüphaneyi seçebilirsiniz.

Karşılaştırmayı hangi ölçütlerle yapmalısınız?​


Görüntü işleme kütüphaneleri farklı amaçlara göre tasarlanır. Pillow, temel görüntü okuma, dönüştürme, yeniden boyutlandırma ve kaydetme işlerinde sade bir arayüz sunar. OpenCV, bilgisayarlı görü, kamera akışı, filtreleme, kenar ve şekil tespiti gibi işlemlerde daha geniş bir araç seti sağlar. scikit-image, NumPy dizileriyle çalışan bilimsel görüntü işleme algoritmaları için uygundur. imageio ise görüntü ve video dosyalarını okumak ve yazmak için daha dar kapsamlı bir seçenek olarak değerlendirilebilir.

Aynı görevi karşılaştırırken şu ölçütleri ayrı ayrı inceleyin:
  • İşlev kapsamı: Kütüphane yalnızca dosya ve piksel işlemleri mi yapıyor, yoksa nesne, kenar, hareket veya video analizi gibi daha ileri işlemleri de destekliyor mu?
  • API açıklığı: Sık kullanılacak işlemler az kodla ve anlaşılır biçimde yapılabiliyor mu?
  • Veri biçimi: Kütüphane NumPy dizileriyle, renk kanallarıyla ve farklı piksel türleriyle nasıl çalışıyor?
  • Performans: Aynı boyuttaki görüntülerde çalışma süresi ve bellek kullanımı nasıl değişiyor?
  • Çıktı doğruluğu: Yeniden boyutlandırma, renk dönüşümü veya filtreleme sonrasında beklenen görsel sonuç korunuyor mu?
  • Proje uyumu: Kütüphanenin bağımlılıkları, mevcut kod yapınız ve dağıtım ortamınızla uyumlu mu?
Tek bir küçük görüntü üzerinde alınan süre, genel performansı kanıtlamaz. Farklı çözünürlüklerde birkaç örnek kullanın ve ilk çalıştırmayı ölçüme katmadan önce kütüphaneleri yükleyin.

Kütüphaneleri kullanım amacına göre ayırın​


Aşağıdaki tablo, ilk seçimi daraltmak için kullanılabilir. Bu bir hız sıralaması değildir; aynı görevde sonuç, görüntü boyutuna, kullanılan yönteme ve donanıma göre değişebilir.
KütüphaneÖne çıkan kullanımGüçlü yönüDikkat edilmesi gereken
PillowDosya, renk, boyut ve temel piksel işlemleriSade ve okunabilir APIİleri bilgisayarlı görü işlemleri için kapsamı sınırlı kalabilir
OpenCVBilgisayarlı görü, kamera ve video işlemleriGeniş algoritma ve gerçek zamanlı işleme seçenekleriRenk kanalı ve veri türü dönüşümleri dikkat ister
scikit-imageBilimsel ve algoritmik görüntü işlemeNumPy tabanlı analiz akışlarıyla uyumTemel dosya işlemleri için daha kapsamlı görünebilir
imageioGörüntü ve video okuma-yazmaGirdi-çıktı işlemlerinde pratiklikTek başına tam bir bilgisayarlı görü çözümü değildir
Örneğin yalnızca kullanıcıdan alınan resmi açıp küçültecek ve JPEG olarak kaydedecekseniz Pillow daha doğrudan bir seçim olabilir. Kameradan kare alıp hareket veya nesne analizi yapacaksanız OpenCV’nin araçları daha uygun olabilir. Bilimsel bir çalışmada eşikleme, bölütleme veya morfolojik işlemleri NumPy dizileriyle birlikte uygulayacaksanız scikit-image değerlendirilebilir. Bu seçimler, her kütüphanenin her işlemde diğerlerinden kesin olarak daha iyi olduğu anlamına gelmez.

Aynı işlemi ölçerek karşılaştırın​


Ön koşul olarak aynı Python ortamında Pillow ve tek bir OpenCV dağıtımı bulunmalıdır. Yeni bir sanal ortamda python -m pip install Pillow opencv-python-headless komutu bu örnek için yeterlidir; mevcut ortamda başka bir OpenCV dağıtımı varsa aynı cv2 ad alanını kullanan ikinci dağıtımı eklemeyin. Yönü önceden düzeltilmiş, EXIF Orientation etiketi taşımayan aynı JPEG girdisini kullanın; Python ve kütüphane sürümlerini kaydedin. Aşağıdaki örnek açma, gri tona çevirme, 800 × 600 boyutlandırma ve JPEG kaydetme akışını ölçer. İki tarafta bilinear yeniden örnekleme ve 95 JPEG kalite ayarı açıkça seçilmiştir. Süre değerleri donanıma göre değişir; bu bir ölçüm yöntemidir.
  1. Aynı girdiyi seçin. Örneğin ornek.jpg adlı, sabit çözünürlüklü bir görüntüyü her iki uygulamaya da verin. Farklı görüntüler kullanırsanız ölçüm, kütüphaneler yerine girdilerin farkını yansıtabilir.
  2. Aynı işlemleri iki ayrı işlevde uygulayın. Renk dönüşümü, yeniden boyutlandırma ve çıktı biçimini iki tarafta da mümkün olduğunca eşleştirin.
  3. Her işlevi birkaç kez çalıştırın. İlk çalıştırmayı ısınma için ayırın, sonraki çalıştırmaların ortalama süresini ölçün. Tek ölçümden performans sonucu çıkarmayın.
  4. Çıktıları doğrulayın. Oluşan dosyaların gerçekten kaydedildiğini, çözünürlüklerinin aynı olduğunu ve renklerin ters görünmediğini kontrol edin. Süre daha kısa olsa bile görüntü yanlışsa sonuç başarılı sayılmaz.
Python:
from time import perf_counter


def pillow_islemi(girdi, cikti):
    from PIL import Image

    with Image.open(girdi) as image:
        image = image.convert("L")
        image = image.resize((800, 600), resample=Image.Resampling.BILINEAR)
        image.save(cikti, format="JPEG", quality=95)


def opencv_islemi(girdi, cikti):
    import cv2

    image = cv2.imread(str(girdi), cv2.IMREAD_COLOR)
    if image is None:
        raise FileNotFoundError(f"Görüntü okunamadı: {girdi}")

    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    image = cv2.resize(image, (800, 600), interpolation=cv2.INTER_LINEAR)

    if not cv2.imwrite(str(cikti), image, [cv2.IMWRITE_JPEG_QUALITY, 95]):
        raise OSError(f"Görüntü kaydedilemedi: {cikti}")


def olc(fonksiyon, tekrar=5):
    sureler = []
    for _ in range(tekrar):
        baslangic = perf_counter()
        fonksiyon()
        sureler.append(perf_counter() - baslangic)
    return sum(sureler) / len(sureler)


olc(lambda: pillow_islemi("ornek.jpg", "pillow_cikti.jpg"), tekrar=1)
olc(lambda: opencv_islemi("ornek.jpg", "opencv_cikti.jpg"), tekrar=1)

pillow_sure = olc(lambda: pillow_islemi("ornek.jpg", "pillow_cikti.jpg"))
opencv_sure = olc(lambda: opencv_islemi("ornek.jpg", "opencv_cikti.jpg"))

print(f"Pillow ortalama süre: {pillow_sure:.4f} saniye")
print(f"OpenCV ortalama süre: {opencv_sure:.4f} saniye")
from PIL import Image
import cv2

with Image.open("pillow_cikti.jpg") as sonuc:
    assert sonuc.size == (800, 600) and sonuc.mode == "L"
sonuc_cv = cv2.imread("opencv_cikti.jpg", cv2.IMREAD_UNCHANGED)
assert sonuc_cv is not None and sonuc_cv.shape == (600, 800)
print("İki çıktı da 800 x 600 boyutunda ve tek kanallı.")

Kod iki ortalama süreyi yazdırır; kaydedilen çıktıları yeniden açıp boyut ve kanal kontrollerini assert ile doğrular. Sürelere dosya okuma, dönüşüm, boyutlandırma ve kaydetme dahildir. İşletim sistemi dosya önbelleği tekrarları etkileyebilir; farklı çalıştırmalarda sıra değiştirerek de ölçün. Daha kısa süre yalnız bu girdi ve ayarlar için bir sonuçtur. Aynı bilinear ve JPEG kalite ayarı, kütüphanelerin filtreleme, yuvarlama veya codec uygulamalarını birebir aynı yapmaz; çıktı kalitesini ayrıca değerlendirin.

Yöntem ve parametre ayrıntıları için Pillow yeniden boyutlandırma belgesi, Pillow JPEG ayarları, OpenCV yeniden boyutlandırma belgesi ve OpenCV dosya yazma ayarları kullanılabilir.

Sonucu nasıl yorumlamalısınız?​


Dosya işlemleri ve temel dönüşümler baskınsa API sadeliği ve bakım kolaylığı genellikle hız kadar önemlidir. Gerçek zamanlı kamera veya video akışında gecikme, kare işleme süresi ve bellek kullanımı daha belirleyici olur. Bilimsel analizde ise yalnızca süreyi değil, algoritmanın ürettiği sonuçların doğruluğunu ve NumPy tabanlı iş akışına uyumunu da değerlendirin.

Karşılaştırmayı tamamladıktan sonra her kütüphane için aynı girdide şu bilgileri kaydedin: ortalama süre, çıktı çözünürlüğü, renk düzeni, bellek kullanımı ve başarısız işlemler. Son seçimi bu ölçümlerin yanı sıra projenin ana işine göre yapın. Basit dosya ve piksel işlemlerinde sadelik, ileri görüntü analizinde işlev kapsamı, yoğun iş akışlarında ise doğrulanmış performans öncelikli ölçüt olmalıdır.
 

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Geri
Üst