Üçüncü Ders
Ders Konuları
- Bitwise İşlemleri
- Renk Kanalları
- Blurlama
1. Bitwise İşlemleri
OpenCV kütüphanesi, bitwise işlemlerini yapmak için cv2.bitwise_and()
, cv2.bitwise_or()
, cv2.bitwise_xor()
ve cv2.bitwise_not()
gibi bir dizi işlev sağlar. Bu işlevler, iki veya daha fazla görüntü arasında bitwise işlemleri yapmak için kullanılabilir. Bu işlemler, görüntülerin piksel değerlerine dayalı olarak gerçekleştirilir.
Aşağıda, bitwise işlemlerinin nasıl yapıldığını ve neden önemli olduklarını açıklayan bir örnek verilmiştir:
import cv2
import numpy as np
# İki adet siyah beyaz resim oluşturma
img1 = np.zeros((250, 500, 3), np.uint8)
img1[50:200, 100:300] = [255, 255, 255]
img2 = cv2.imread("resim.jpg")
img2 = cv2.resize(img2, (500, 250))
# Resimler arasında bitwise işlemleri yapma
bit_and = cv2.bitwise_and(img2, img1)
bit_or = cv2.bitwise_or(img2, img1)
bit_xor = cv2.bitwise_xor(img1, img2)
bit_not = cv2.bitwise_not(img1)
# Görüntüleri gösterme
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.imshow("Bitwise AND", bit_and)
cv2.imshow("Bitwise OR", bit_or)
cv2.imshow("Bitwise XOR", bit_xor)
cv2.imshow("Bitwise NOT", bit_not)
cv2.waitKey(0)
cv2.destroyAllWindows()
Bu kod parçası, iki farklı görüntü üzerinde bitwise işlemlerini gösterir. İlk adımda, bir siyah-beyaz resim ve bir renkli resim oluşturulur. Daha sonra, cv2.bitwise_and()
, cv2.bitwise_or()
, cv2.bitwise_xor()
ve cv2.bitwise_not()
işlevleri kullanılarak bu iki resim arasında farklı bitwise işlemleri yapılır.
cv2.bitwise_and()
işlevi, iki görüntünün her pikselindeki değerleri AND işlemine tabi tutar ve sonucu yeni bir görüntüde depolar. cv2.bitwise_or()
işlevi, her iki görüntüdeki piksel değerlerinin OR işlemine tabi tutulduğu yeni bir görüntü oluşturur. cv2.bitwise_xor()
işlevi, iki görüntünün her pikselindeki değerleri XOR işlemine tabi tutar ve yeni bir görüntü oluşturur. Son olarak, cv2.bitwise_not()
işlevi, bir görüntünün her piksel değerini tersine çevirir.
Bu işlemler, görüntü işleme ve bilgisayarlı görü işleme uygulamalarında önemlidir. Örneğin, görüntüdeki nesneleri ayırmak ve bölümlere ayımak için kullanılabilirler. Bu işlemler, farklı görüntü sınıflarını (nesne veya arka plan) ayırmak için kullanılabilir ve sonuçta, daha iyi nesne tanıma ve sınıflandırma yapmak için kullanılabilirler.
Bitwise işlemleri, maskeleme ve resimler arasındaki bölgeleri karşılaştırmak gibi diğer işlemler için de kullanılabilir. Örneğin, bir resimdeki belirli bir bölgenin (nesne veya arka plan) görüntüsünü ayırmak için maskeleme kullanılabilir.
Sonuç olarak, bitwise işlemleri, farklı görüntü işleme uygulamalarında yaygın olarak kullanılır ve OpenCV gibi kütüphaneler, bu işlemleri kolayca gerçekleştirmek için çeşitli işlevler sağlar.
2. Renk Haritaları
OpenCV, renk haritaları olarak bilinen birçok renk uzayını destekler. Renk haritaları, bir görüntüdeki piksel renklerini temsil etmek için kullanılan bir dizi renk kodlamasıdır. Bu renk kodlamaları, RGB renk uzayı yerine farklı renk uzaylarına dayanır ve belirli görevler için daha uygun olabilirler.
Aşağıda, OpenCV kütüphanesi tarafından desteklenen bazı renk haritaları hakkında bilgi veriyor ve her biri için bir örnek veriyorum:
### 2.1. Grayscale renk haritası:
Grayscale renk haritası, her pikselin tek bir gri tonu ile temsil edildiği bir renk uzayıdır. Bu renk haritası, siyah beyaz görüntüler için idealdir. Aşağıdaki örnek, bir RGB görüntüsünü gri tonlamalı bir görüntüye dönüştürür ve sonucu gösterir:
import cv2
image = cv2.imread("resim.jpg")
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Grayscale Görüntü", gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
### 2.2. HSV renk haritası:
HSV renk haritası, her pikselin Hue, Saturation ve Value (Renk tonu, Doyma ve Parlaklık) değerleri ile temsil edildiği bir renk uzayıdır. Bu renk haritası, renkler arasındaki farklılıkların daha doğru bir şekilde belirlenmesine izin verir ve renk tabanlı işlemler için uygun bir seçenektir. Aşağıdaki örnek, bir RGB görüntüsünü HSV renk uzayına dönüştürür ve ardından belirli bir renk aralığını maskeler:
### 2.3. HSV Renk Uzayı:
HSV renk uzayı, her pikselin Hue, Saturation ve Value (Renk tonu, Doyma ve Parlaklık) değerleriyle temsil edilir. Hue, renkleri temsil ederken, Saturation ve Value, renklerin canlılığı ve parlaklığına karşılık gelir. HSV renk uzayı, belirli bir renk aralığını maskelemek veya nesne takibi gibi renk tabanlı uygulamalar yapmak için idealdir.
import cv2
import numpy as np
image = cv2.imread("resim.jpg")
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# yeşil renk aralığını belirle
lower_green = np.array([25, 52, 72])
upper_green = np.array([102, 255, 255])
# yeşil renk maskesi oluştur
mask = cv2.inRange(hsv_image, lower_green, upper_green)
# yeşil renk maskesi ile orijinal görüntüyü birleştir
result = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("HSV Görüntüsü", hsv_image)
cv2.imshow("Yeşil Renk Maskelemesi", mask)
cv2.imshow("Sonuç Görüntüsü", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
### 2.4. HLS Renk Uzayı:
HLS renk uzayı, Hue, Lightness ve Saturation (Renk tonu, Işık Şiddeti ve Doyma) değerleriyle her pikseli temsil eder. Hue, renkleri temsil ederken, Lightness, renklerin parlaklığına ve Saturation, renklerin canlılığına karşılık gelir. HLS renk uzayı, renkleri segmente etmek ve nesne takibi yapmak için kullanılabilir.
import cv2
import numpy as np
image = cv2.imread("resim.jpg")
hls_image = cv2.cvtColor(image, cv2.COLOR_BGR2HLS)
# turuncu renk aralığını belirle
lower_orange = np.array([10, 50, 50])
upper_orange = np.array([25, 255, 255])
# turuncu renk maskesi oluştur
mask = cv2.inRange(hls_image, lower_orange, upper_orange)
# turuncu renk maskesi ile orijinal görüntüyü birleştir
result = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("HLS Görüntüsü", hls_image)
cv2.imshow("Turuncu Renk Maskelemesi", mask)
cv2.imshow("Sonuç Görüntüsü", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
Renk haritalarının seçimi, uygulamanın ihtiyaçlarına ve işlenecek görüntülerin özelliklerine bağlıdır. Renk tabanlı işlemler için doğru renk haritasının seçimi, daha doğru sonuçlar elde etmek için kritiktir.
3. Blurlama ve Prüzsüzleştirme
OpenCV, farklı blurlama yöntemlerini uygulamak için birçok işlev sağlar. Görüntü blurlama, görüntüdeki gürültüyü azaltmak, kenarları yumuşatmak veya belirginliği azaltmak için kullanılır. İşte OpenCV kütüphanesi içindeki bazı blurlama yöntemleri:
3.1. Gaussian Blur:
Gaussian blur, her pikselin etrafındaki pikselleri ağırlıklandırmak ve daha yumuşak bir görüntü elde etmek için bir Gauss fonksiyonunu kullanarak blurlama yapar. Bu yöntem, görüntüdeki gürültüyü azaltmak ve kenarları yumuşatmak için sıklıkla kullanılır.
import cv2
image = cv2.imread("resim.jpg")
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Gaussian Blur Görüntüsü", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.2. Median Blur:
Median blur, her pikselin etrafındaki piksellerin ortanca değerini kullanarak blurlama yapar. Bu yöntem, birçok farklı blurlama yöntemi arasında en etkili olanıdır. Bu yöntem, salt-and-pepper gürültüsünü azaltmak için özellikle uygundur.
import cv2
image = cv2.imread("resim.jpg")
blurred_image = cv2.medianBlur(image, 5)
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Median Blur Görüntüsü", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.3. Bilateral Blur:
Bilateral blur, her pikselin etrafındaki piksellerin hem uzaklığını hem de renk benzerliğini dikkate alarak blurlama yapar. Bu yöntem, kenarları koruyarak gürültüyü azaltmak için özellikle uygundur.
import cv2
image = cv2.imread("resim.jpg")
blurred_image = cv2.bilateralFilter(image, 9, 75, 75)
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Bilateral Blur Görüntüsü", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Bu örnekler, OpenCV kütüphanesi içinde bulunan ve farklı amaçlar için kullanılan üç farklı blurlama yöntemini gösterir. Blurlama, görüntü işleme ve bilgisayarlı görü işleme uygulamalarında oldukça yaygındır ve OpenCV gibi kütüphaneler, farklı blurlama yöntemleri arasında dönüştürmek için kolayca kullanılabilir işlevler sağlar.
3.4. Box Blur:
Box blur, her pikselin etrafındaki piksellerin ağırlıklı ortalamasını kullanarak blurlama yapar. Bu yöntem, birçok görüntü işleme uygulamasında yaygın olarak kullanılır.
import cv2
image = cv2.imread("resim.jpg")
blurred_image = cv2.boxFilter(image, -1, (5, 5))
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Box Blur Görüntüsü", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.5. Gamma Düzeltme:
Gamma düzeltme, piksellerin parlaklık değerlerini değiştirerek görüntüdeki kontrastı ve renk doygunluğunu artırmak veya azaltmak için kullanılır. Bu yöntem, genellikle düşük ışık koşullarında veya düşük kontrastlı görüntülerde kullanılır.
import cv2
import numpy as np
image = cv2.imread("resim.jpg")
gamma = 1.5
gamma_corrected = np.power(image / 255.0, gamma) * 255.0
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Gamma Düzeltme Görüntüsü", gamma_corrected.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
3.6. 2D Filtreler:
2D filtreler, her pikselin etrafındaki pikselleri bir filtre matrisi kullanarak ağırlıklandırır ve daha düzgün bir görüntü elde etmek için blurlama yapar. Bu yöntem, kenarları yumuşatmak, gürültüyü azaltmak ve nesne takibi gibi birçok farklı uygulamada kullanılabilir.
import cv2
import numpy as np
image = cv2.imread("resim.jpg")
kernel = np.ones((5,5),np.float32)/25
filtered_image = cv2.filter2D(image, -1, kernel)
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("2D Filtre Görüntüsü", filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.7. Ortalama Alma:
Ortalama alma, her pikselin etrafındaki piksellerin ortalamasını kullanarak blurlama yapar. Bu yöntem, diğer blurlama yöntemleri kadar etkili olmasa da, basit bir blurlama yöntemi olarak yaygın olarak kullanılır.
import cv2
image = cv2.imread("resim.jpg")
blurred_image = cv2.blur(image, (5, 5))
cv2.imshow("Orijinal Görüntü", image)
cv2.imshow("Ortalama Alma Görüntüsü", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()