Giriş
Görüntü işleme, günümüzde birçok alanda önemli bir yer tutmaktadır. Özellikle güvenlik, otomasyon ve veri analizi gibi alanlarda yaygın olarak kullanılmaktadır. Python’un popülaritesi ve OpenCV kütüphanesinin sunduğu çeşitli olanaklar sayesinde, görüntüleri işlemek ve analiz etmek oldukça kolay hale gelmiştir. Bu yazıda, Python ile OpenCV kullanarak iki resim arasındaki farkı hesaplamak için cv2.absdiff()
fonksiyonunun nasıl kullanılacağını adım adım inceleyeceğiz.
İlk olarak, bu işlemin neden önemli olduğunu anlamak önemlidir. Örneğin, güvenlik kameralarından alınan görüntülerin analiz edilmesi, hırsızlık gibi durumların tespit edilmesine yardımcı olabilir. Ayrıca, görüntülerdeki değişikliklerin izlenmesi de çarpıcı görsel içerikler veya veri setleri oluşturmak için kullanılabilir. OpenCV’nin sağlayacağı araçlar ile bu tür uygulamaları daha etkili ve hızlı bir şekilde gerçekleştirmek mümkündür.
Bu yazıda, adım adım bir proje geliştirerek cv2.absdiff()
fonksiyonunu kullanarak nasıl görüntü farkı alacağımızı göstereceğiz. Fark alma işlemi, iki görüntü arasındaki piksellerin karşılaştırılması esasına dayanmaktadır ve OpenCV, bu tür işlemleri son derece verimli bir şekilde yapabilmektedir.
OpenCV Kurulumu
Öncelikle, OpenCV kütüphanesini sistemimize kurmamız gerekiyor. Eğer zaten kurulu değilse, Python paket yöneticisi olan pip
ile kurulum yapabiliriz. Terminal veya komut istemcisine şu komutu yazarak kütüphaneyi yükleyebilirsiniz:
pip install opencv-python
Yukarıdaki komut, bilgisayarınıza OpenCV kütüphanesini yükleyecektir. Yükleme tamamlandıktan sonra, kütüphaneyi projenizde kullanmak için gerekli modülleri içe aktarmamız gerekiyor. Bunu yapmak için Python dosyanızın en üstüne aşağıdaki satırları ekleyin:
import cv2
import numpy as np
Bu iki kütüphane, görüntü işleme ve matris işlemleri için oldukça kullanışlıdır. numpy
, verimlilik ve hızlı hesaplamalar yapmamıza yardımcı olurken, cv2
ise görüntü işlemleri için gerekli araçları sağlar.
İki Görüntü Yükleme
Artık OpenCV kütüphanesini yüklediğimize göre, farkını hesaplamak istediğimiz iki resmi projeye yükleyelim. Bunu yapmak için yine aşağıdaki gibi cv2.imread()
fonksiyonunu kullanacağız. Bu fonksiyon, resim dosyanızın yolunu alır ve resmi bir matris olarak döndürür:
img1 = cv2.imread('gorsel1.jpg')
img2 = cv2.imread('gorsel2.jpg')
Yukarıdaki kodda, gorsel1.jpg
ve gorsel2.jpg
olarak iki görüntüyü yüklüyoruz. Bu görüntülerin boyutlarının ve formatlarının aynı olması önemlidir. Eğer boyutları farklıysa, görüntüler arasında karşılaştırma yapılamaz. Bunu sağlamak için gerekli ayarlamaları yapacağız.
Eğer resimlerin boyutları farklıysa, cv2.resize()
fonksiyonunu kullanarak bu iki resmi aynı boyuta getirebiliriz. Örneğin:
img2 = cv2.resize(img2, (img1.shape[1], img1.shape[0]))
Bu satır ile img2
görüntüsünü, img1
’in boyutlarına göre yeniden boyutlandırmış oluyoruz.
Görüntü Farkını Almak
Görüntüleri yükledikten sonra, temel işlemin uygulanabilmesi için artık cv2.absdiff()
fonksiyonunu kullanabiliriz. Bu fonksiyon, iki görüntü arasındaki piksel farkını alır ve sonuç olarak yeni bir görüntü döndürür. Fark alma işlemi aşağıdaki gibi gerçekleştirilecek:
fark = cv2.absdiff(img1, img2)
Böylece fark
adında, iki görüntü arasındaki farkı içeren bir matris elde etmiş oluyoruz. Bu matris, her piksel için iki görüntünün değerlerini karşılaştıracaktır. Eğer iki görüntü aynı ise, fark
matrisindeki tüm değerler 0 olacaktır. Farklı pikseller ise, o pikselin değerinin büyüklüğü ile temsil edilecektir.
Sonuç olarak, farkı hesaplamak için aldığımız görüntünün içinde yalnızca piksellerin değer değişimi olacaktır. Bunu görselleştirmek için, cv2.imshow()
fonksiyonunu kullanarak sonuç ekranında gösterebiliriz:
cv2.imshow('Goruntü Farkı', fark)
cv2.waitKey(0)
cv2.destroyAllWindows()
Bu kod, hesapladığımız fark matrisini yeni bir pencere içerisinde gösterecek ve herhangi bir tuşa bastığınızda pencere kapanacaktır.
Sonuç Görüntülerinin Kaydedilmesi
Hesaplanan farkların daha sonra incelenebilmesi için kaydedilmesi de önemlidir. OpenCV, görüntüyü kolaylıkla kaydetmek için cv2.imwrite()
fonksiyonunu sağlamaktadır. Bu fonksiyonu kullanarak, elde ettiğimiz fark görüntüsünü kaydetmek için aşağıdaki kodu kullanabiliriz:
cv2.imwrite('goruntu_farki.jpg', fark)
Artık, uygulama sonrasında fark görüntüsünü projemizin olduğu dizine goruntu_farki.jpg
adıyla kaydetmiş olacağız. Bu dosyayı daha sonra analiz etmek veya raporlamak amacıyla kullanabilirsiniz.
Bunların yanı sıra, kaydedilen fark görüntüsünün basit bir görsel kontrolü yapılabilir. Eğer fark görüntüsü yüzeysel olarak inceleme yapacaksak, aşağıdaki şekilde bir kontrol yapılabilir:
if np.max(fark) == 0:
print('Görüntüler arasında fark yok!')
else:
print('Görüntüler arasında fark var!')
Bu kontrol ile, iki görüntü arasında herhangi bir fark olup olmadığını hızlıca tespit edebilirsiniz.
Ek Özellikler ve İyileştirmeler
Şimdi, farkın daha belirgin olabilmesi için birkaç ek teknikten bahsedelim. Örneğin, farklılık görüntüsünün daha açık bir şekilde ortaya çıkabilmesi için görüntüyü gri tonlama formatına çevirebiliriz. Gri tonlama, renk bilgisi içermeyen ve sadece parlaklık değerlerine dayanan bir görüntü formatıdır. Bunun için cv2.cvtColor()
fonksiyonu ile görseli girmek yeterlidir:
fark_gri = cv2.cvtColor(fark, cv2.COLOR_BGR2GRAY)
Gri tonlamalı fark görüntüsünü ise daha sonra eşikleme işlemi ile daha belirgin hale getirebiliriz. Eşikleme, belirli bir değer üstündeki piksellerin beyaz, altındaki piksellerin ise siyah olmasını sağlar:
_, thresh = cv2.threshold(fark_gri, 30, 255, cv2.THRESH_BINARY)
Burada 30 piksel değeri, eşiği temsil eder. Yani bu değerin üzerindeki pikseller beyaz, altındaki pikseller ise siyah olacak şekilde ayarlamaktadır. Elde edilen thresh
matrisini ekran gösterimi veya kaydetme işlemlerine tabi tutarak belirginlik elde edebilirsiniz.
Sonuç
Tüm bu adımları takip ederek, OpenCV kullanarak iki görüntü arasındaki farkları rahatlıkla tespit edebiliriz. Python ve OpenCV kombinasyonu ile görsel verilerin analizi oldukça kolay bir hale gelmiştir. Projenizdeki içeriğe göre, bu temel örneği genişleterek daha karmaşık uygulamalar geliştirebilirsiniz. Fark alma işlemi, yalnızca görsel analizle sınırlı kalmayıp, güvenlik ve otomasyon gibi çok çeşitli alanlarda kullanılabileceği gibi geliştirilmeye de açıktır.
Unutmayın ki, görüntü işleme projeleri genellikle görsel içeriklerin belirli bir hedefe ulaşması için gereken önemli adımlar içerir. Bu tür işlemlerde deneyerek öğrenmek oldukça faydalıdır. Açık kaynak kodlu Python kütüphaneleri sayesinde, yeni uygulamalar ve projeler ortaya koymak için birçok fırsat bulunmaktadır. Şimdi, bu bilgiler ışığında kendi projelerinizi geliştirmeye başlayabilirsiniz!
Python ve OpenCV ile ilgili daha fazla bilgi ve örnek için elimizdeki kaynakları değerlendirmekten çekinmeyin. Gelecek projelerinizde başarılar dilerim!