OpenCv’de Filtreleme İşlemlerine Giriş

Merhaba arkadaşlar, Mobilhanem.com sitemizde Python ile Görüntü İşleme Dersleri eğitim serisine kaldığımız yerden devam ediyoruz. Geçen dersimizde Video Kaydetme ve Döndürme İşlemlerinden bahsettik. Python ile Görüntü İşleme dersinde bu hafta ise OpenCv’de Filtreleme İşlemlerine Giriş dersine başlayacağız. Eğer bir önceki dersimizi inceleme fırsatınız olmadıysa Video Kaydetme ve Döndürme İşlemleri  dersimize buradan ulaşabilirsiniz.

Yeni konumuz olan filtreleme işlemleri geniş kapsamları bir konu olacaktır. Hangi konuları işleyeceğimizi gelin birlikte maddeler halinde inceleyelim.

  • Renk Filtreleme
  • Bulanıklaştırma
  • Video Üzerinde Canny ile Kenar Tespiti
  • Canny Yöntemi ile Resimde Kenar Tespiti
  • Basit Eşit Filtreleme
  • Gauss ve Mean Adaptif Filtrelemeler
  • Otsu Yöntemi ile Eşit Filtreleme
  • Eşit Filtreleme Yöntemi ile Metin Netleştirme

Yukarıdaki gördüğünüz konu başlıkları ile OpenCv’de Filtreleme İşlemleri dersini ilerleteceğiz. Şimdi ilk konunumuz olan renk filtreleme ile dersimize başlayalım.

Renk Filtreleme

Renk filtrelememizdeki amaç video veya resim üzerindeki istediğimiz rengi veya renklerin tonlarını ön plana çıkarmaktır. Örnek verecek olursak elimizde bulunan birden fazla renkli nesnenin kırmızı olanlarını görüntülemek istiyorsak renk filtreleme işlemi ile kırmızı renkteki nesnelerin renklerini ön plana çıkarabiliriz.

Öncelikle opencv ve numpy kütüphanelerimizi projemize dahil edelim.

import cv2
import numpy as np

Bilgisayar kameramız üzerinden öncelikle görüntümüzü okuyalım ve ekranda gösterelim.

import cv2
import numpy as np

kamera = cv2.VideoCapture(0)

while(True):
    ret, bilgisayarKamerasi = kamera.read()


    cv2.imshow('Orjinal Goruntu (Bilgisayar Kamerasi)',bilgisayarKamerasi)
    if cv2.waitKey(25) & 0xFF == ord('x'):
        break

kamera.release()
cv2.destroyAllWindows()

 

Renk filtreleme işleminde alınan görüntüyü HSV (hue[ton], saturation[doygunluk], value[değer]) renk modeline çevirememiz gerekmektedir.  Genel HSV renk alanı, RGB renk uzayının başka bir ifadesidir. Algılama renk kontaklarını RGB’den daha net ifade ettiğinden ve hesaplama çok basit olduğundan görüntü işlemede yaygın olarak kullanılmaktadır. Bu sebepten ötürü HSV renk modelini kullanacağız.

Öncelikle aldığımız görüntüyü HSV’te çevirelim.

import cv2
import numpy as np

kamera = cv2.VideoCapture(0)

while(True):
    ret, bilgisayarKamerasi = kamera.read()

    hsv=cv2.cvtColor(bilgisayarKamerasi,cv2.COLOR_BGR2HSV)

    cv2.imshow('Orjinal Goruntu (Bilgisayar Kamerasi)',bilgisayarKamerasi)
    if cv2.waitKey(25) & 0xFF == ord('x'):
        break

kamera.release()
cv2.destroyAllWindows()

HSV’ye çevirdikten sonra filtreleme yapacağımız rengin minimum ve maksimum değerlerini tanımlayacağız. Tanımladığımız renk aralığında filtreleme işlemlerimizi yapacağız.

import cv2
import numpy as np

kamera = cv2.VideoCapture(0)

while(True):
    ret, bilgisayarKamerasi = kamera.read()

    hsv=cv2.cvtColor(bilgisayarKamerasi,cv2.COLOR_BGR2HSV)

    baslangic_altMavi=np.array([100,60,60])
    bitis_ustMavi=np.array([140,255,255])

    cv2.imshow('Orjinal Goruntu (Bilgisayar Kamerasi)',bilgisayarKamerasi)

    if cv2.waitKey(25) & 0xFF == ord('x'):
        break

kamera.release()
cv2.destroyAllWindows()

Mavi rengi için alt ve üst referans değerlerini RGB renk kodları ile belirledik. Bu renk kodlarının aralıklarındaki değerlere göre filtreleme işlemini gerçekleştireceğiz.  Mavi rengin referans değerlerini belirledikten sonra görüntü üzerinde maskeleme yapacağız.

Maskeleme, tanımladığımız  küçük görüntü parçası ile daha büyük bir görüntüyü değiştirmek için kullandığımız bir görüntü işleme yöntemidir. Maskeleme, kenar algılama, hareket algılama ve gürültü azaltma dahil olmak üzere birçok görüntü işleme türünün altında yatan bir işlemdir.

import cv2
import numpy as np

kamera = cv2.VideoCapture(0)

while(True):
    ret, bilgisayarKamerasi = kamera.read()

    hsv=cv2.cvtColor(bilgisayarKamerasi,cv2.COLOR_BGR2HSV)

    baslangic_altMavi=np.array([100,60,60])
    bitis_ustMavi=np.array([140,255,255])


    maske=cv2.inRange(hsv,baslangic_altMavi,bitis_ustMavi)
    filtreli_goruntu=cv2.bitwise_and(bilgisayarKamerasi,bilgisayarKamerasi,mask=maske)

    cv2.imshow('Orjinal Goruntu (Bilgisayar Kamerasi)',bilgisayarKamerasi)

    if cv2.waitKey(25) & 0xFF == ord('x'):
        break

kamera.release()
cv2.destroyAllWindows()

Bitwise fonksiyonu ile maskeleme işlememizi tamamladık. Şimdi ekranda orjinal halini, maske alanımızı ve filtrelenmiş rengimizi görelim.

import cv2
import numpy as np

kamera = cv2.VideoCapture(0)

while(True):
    ret, bilgisayarKamerasi = kamera.read()

    hsv=cv2.cvtColor(bilgisayarKamerasi,cv2.COLOR_BGR2HSV)

    baslangic_altMavi=np.array([100,60,60])
    bitis_ustMavi=np.array([140,255,255])


    maskeleme=cv2.inRange(hsv,baslangic_altMavi,bitis_ustMavi)
    filtreli_goruntu=cv2.bitwise_and(bilgisayarKamerasi,bilgisayarKamerasi,mask=maskeleme)

    cv2.imshow('Orjinal Goruntu (Bilgisayar Kamerasi)',bilgisayarKamerasi)
    cv2.imshow('Maskeli Goruntu (Bilgisayar Kamerasi)',maskeleme)
    cv2.imshow('Filtrenlemis Goruntu (Bilgisayar Kamerasi)',filtreli_goruntu)

    if cv2.waitKey(25) & 0xFF == ord('x'):
        break

kamera.release()
cv2.destroyAllWindows()

Gördüğünüz üzere filtreleme için seçtiğimiz mavi değer aralıklarına göre rengimizi filtreledik. Ayrıca maskelenmiş alanımızı da ekranımızda gördük.

 

Mobilhanem.com da Python ile Görüntü İşleme serisinde bir dersin daha sonuna geldik. Bu hafta Python ile Görüntü İşleme dersimizde OpenCv’de Filtreleme İşlemlerine Giriş yaptık. Umarım sizin için faydalı bir yazı olmuştur. Bir sonraki OpenCv’de Bulanıklaştırma İşlemi dersinde görüşmek üzere. Eksik ya da yanlış gördüğünüz bir şey varsa lütfen iletişime geçmekten çekinmeyin. Sorularınızı buradan sorabilirsiniz.

Tüm Görüntü İşleme Dersleri için tıklayınız.

Kaynak: Link1 

 

29

Yunus Emre Aydın

Yazılım Mühendisi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?