OpenCV ile Görüntü İşleme
Bilgisayarlı Görü Nedir?
 Günümüzde kameralı donanımların ucuzlaması ve yaygınlaşması ile birlikte
insanoğlunun değerlendirmesi gereken devasa büyüklükte görüntü verileri her an
yığılmaya devam ediyor.
 Her kavşakta rastlanan trafik kameralarından binalardaki güvenlik kameralarına,
profesyonel cihazlardan herkesin cebinde taşıdığı mobil telefonlara kadar pek çok
kaynaktan gelen görüntüler anlamlandırılmayı bekliyor.
 İşlek bir cadde üzerine konumlandırılmış denetim kamerasını düşünün; yol durumunu
sürekli kayıt altın alabilir. Ancak artık ihtiyaç duyduğumuz sadece devasa boyutlardaki
bu görüntüyü saklamak değil, trafik kurallarını ihlal eden araçların plakalarını da otonom
olarak tespit edebilmektir…
 İşte Bilgisayarlı Görü ‘Computer Vision’ tam olarak bu ve benzeri ihtiyaçları karşılamak
için ortaya çıkan bir kavramdır. Bu alanda başarılı bir kütüphane olan OpenCV sizlere
tanıtılacaktır.
OpenCV Nedir?
 OpenCV; açık kaynak kodlu bir bilgisayarlı görü kütüphanesidir. Görüntü ve video
işleme ile ilgili 500’den fazla temel ve ileri seviyedeki fonksiyonu, optimize edilmiş
halleriyle barındırmaktadır. İlk olarak Intel’in Rusya’daki laboratuvarında 1999 yılında
geliştirilmeye başlanmıştır.
 OpenCV BSD lisansı altında dağıtılmaktadır. Başlangıçta C ile kodlanmasına rağmen,
2.0 ve 3.0 sürümleri ile gelişmiş bir C++ yapısını desteklemektedir. Bunun dışında
Python, Java vb. diller ile de beraber kullanılabilir.
 OpenCV platform ve işletim sistemi konusunda geniş bir yelpazeye hitap etmektedir.
Windows, Linux, MacOS işletim sistemleri ile; Android, iOS, BBOS, WP vb. mobil
cihazlarda; Ardunio, Raspberry PI, gibi platformlarda kullanılabilmektedir.
Desteklenen Görüntü ve Video Formatları:
 Windows Bitmaps: *.bmp, *.dib
 JPEG Files: *.jpeg, *.jpg, *.jpe, *.jp2
 Portable Network Graphics: *.png
 Portable Image Format: *.pbm, *.pgm, *.ppm
 Sun Rasters: *.sr, *.ras
OpenCV Bileşenleri (OpenCV 3.0)
 highgui: Ekranda pencereler açmak üzerinde görüntüleri göstermek gerektiğinde
güncellemek; klavye ve fareden kullanıcı girişlerini almak gibi işleri yapan
fonksiyonlardan oluşur.
 imgcodecs: Görüntü yazma ve okuma işlemlerini yapar.
 videoio: Video ya da kameradan görüntü yazma ve okuma işlemlerini yapar.
 core: Genel veri yapıları, görüntü üzerinde çizim yapma, XML ve YAML yazma okuma
işlevlerini barındırır.
 imgproc: Görüntü işleme ile ilgili genel fonksiyonları barındırır. Filtreleme, Geometrik
ve Renk Uzay Dönüşümleri, Yapısal Analiz ve Şekil eşleştirme vb. fonksiyonlarını içerir.
 ml: Bayes, SVM, YSA ve benzeri yapay öğrenme algoritmalarından oluşur.
OpenCV Kullanım Alanları
 Askeri Endüstride yaygın olarak kullanılmaktadır.
 Güvenlik, Radar, Astronomi, Trafik Sistemlerinde ve Kriminal Labaratuarlar da
kullanılmaktadır.
 Biyomedikal alanlarda kullanılmaktadır.
 Uydu Görüntüleme de kullanılmaktadır.
 Ölçeklendirme; Resmi istenilen boyutta büyültüp küçültme işlemlerinde kullanılmaktadır.
 Döndürme; Resmi istenilen açı ile kendi ekseni etrafında çevrilme işlemlerinde
kullanılmaktadır.
 Yansıtma; Resmin kendi görüntüsü sabit kalıp, belli bir açı veya 180 derece açıyla
(aynalama / mirror) işlemlerinde kullanılmaktadır.
 Renk Düzeltmesi; Resmin üzerindeki renkleri istenilen tona göre ayarlanması
işlemlerinde kullanılmaktadır.
OpenCV Nereden İndirilir?
http://opencv.org/downloads.html
Renk
 Renk: Cisimlerin yüzeylerinden yansıyan ışığın dalga boyu farklılığıdır. Gözle görünür
ışık dediğimiz dalga boyu 700NM ve 400NM arasındadır.
Renk Uzayları ve Renk Uzayı Dönüşümleri
Renk çeşitliliğinin fazla olması nedeniyle bu renkleri gruplama ihtiyacı doğmuştur bu
renkleri gruplamak ve standartlaştırmak için renk uzayı (color space) kavramı ortaya
çıkmıştır. Her renk uzayı, renk kümesini tanımlamak için kendine özgü bir yapıya sahiptir.
Değişik renk uzayları dönüşümü için OpenCV’nin cvtColor() fonksiyonu kullanılır.
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)
 src: cv::Mat tipinde başlangıç görüntümüz.
 dst: cv::Mat tipinde hedef görüntümüz.
 code: Dönüşüm kodları hangi renk uzayından hangisine dönüştürüleceği bilgisin içerir.
OpenCV tarafından tanımlanmıştır.
GRAY Renk Uzayı Dönüşümleri:
CV_RGB2GRAY => RGB’den GRAY’e dönüştürür. (Görüntü 3 kanaldan tek kanala düşer)
CV_GRAY3RGB => GRAY’den RGB’ye dönüştürür.
HSV Renk Uzayı Dönüşümleri:
CV_RGB2HSV => RGB’den HSV’ye dönüştürür.
CV_HSV2RGB =>HSV’den RGB’ye dönüştürür.
Morfolojik İşlemler
Morfoloji değişik bilim dallarında da kullanılan bir tabirdir ve
biçim bilimi anlamına gelir. Nesnelerin görüntüdeki biçimleri
hem diğer nesnelerden hem de arka plandan ayrıştırılması söz
konusu olduğunda kullanılır. Başta (erosion) ve yayma (dilation)
işlemleri olmak üzere, bunların farklı kombinasyonlarından
türeyen işlemlere göz atacağız.
 Aşındırma (Erosion): Belirginleştirdiğimiz kısmı küçültmek
için kullanılır. (1)
 Yayma (Dilation): Belirginleştirdiğimiz kısmı büyültmek için
kullanılır. (2)
Erosion ve Dilation işlemlerinin farklı kombinasyonları ile
oluşturulan diğer morfolojik işlemler ise;
 Open (Açma): Önce aşındırma, sonra yayma işlemi
dilate(erode(src)),
 Close (Kapama): Önce yayma, sonra aşındırma işlemi
erode(dilate(src)),
Morfolojik İşlemler
void morphologyTransform(inputArray src, OutputArray dst, int op, inputArray karnel, Point
anchor=Point(-1,1), int iterations=1, int borderType=BORDER_CONSTANT, const
Scalar&borderValue=morphologyDefaultBorderValue())
 src: Orijinal görüntü cv::Mat
 dst: Hedef görüntü cv::Mat
 op: Uygulanacak morfolojik işlem kodu MORPH_ERODE, MORPH_DILATE,
MORPH_OPEN, MORPH_CLOSE, MORPH_GRADIENT, MORPH_TOPHAT,
MORPH_BLACKHAT
 karnel: Yapısal eleman – Uygulanacak işlemin hangi şekilde yapılacağını belirler
cv::Mat
 anchor: Yapısal elemanın dayan noktası konumu. Ön değeri (-1,-1) yapısal elemanın
merkezini gösteriyor.
 iteration: İşlemin uygulanma sayısı.
REFERANS:
http://docs.opencv.org/2.4/doc/tutorials/imgproc/opening_closing_hats/opening_closing_h
ats.html
Blur Fonksiyonları İle
Filtreleme İşlemleri
Blur, kelime anlamıyla bulanıklaştırma demektir. Genellikle resimdeki
gürültüyü temizleme işlemleri için kullanılır. Bulanıklaştırma işlemi bir
nesneyi ayrıştırmak için gürültülerin ortadan kaldırılması ya da en aza
indirgenmesi ihtiyacı ile kullanılmaktadır. Farklı parametrelerle
bulanıklaştırma işlemini yapan Blur, GaussianBlur, BoxFilter ve
MedianBlur fonksiyonlarından biz GaussianBlur fonksiyonunu ele
alacağız.
void GaussianBlur( InputArray src, OutputArray dst, size kSize,
double sigmaX, double sigmaY=0, int
borderType=BORDER_DEFAULT)
 src: Orijinal görüntü cv::Mat – Eğer görüntü tek kanallı değil ise
her kanal için ayrı ayrı işlem yapılıp sonuç birleştirilir,
 dst: Hedef görüntü,
 kSize: İlk 3 fonksiyon için cv:Size tipinde işlem için kullanılacak
çekirdek matris ebatları (en, boy),
 sigmaX: Çekirdek için 2 boyutlu gauss eğrisi için eğrinin X
eksenindeki standart sapması,
 sigmaY: Çekirdek için 2 boyutlu gauss eğrisi için eğrinin Y
eksenindeki standart sapması.
REFERANS:
http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highligh
Kenar Bulma
Fonksiyonları
Bir fotoğraftaki nesneleri birbirinden ayırma
metotlarından biri de kenar bilgilerine ulaşmaktır.
Kenar bulma filtreleri bu değişimleri değişik metotlarla
tespit eder. OpenCV’de hazır kodlanmış kenar bulma
metodları Sobel, Laplacian, Scharr ve Canny’dir. Biz
Laplacian metodunu ele alacağız.
void Laplacian( InputArray src, OutputArray dst, int
dDepth, int kSize=1, double scale=1, double delta=0,
int borderType=BORDER_DEFAULT)
 src: Orijinal görüntü cv::Mat – Eğer görüntü tek
kanallı değil ise her kanal için ayrı ayrı işlem
yapılıp sonuç birleştirilir,
 dst: Hedef görüntü,
 dDepth: Hedef görüntünün derinlik değeri -1
verildiğinde orijinal görüntü ile aynı olur,
 kSize: Çekirdek kare matrisin ebadı,
Eşik Filtreleme
Resimde istediğimiz kısımların
ayrıştırılması için son aşamada o veya
değil durumuna getirmemiz gerekmektedir.
Bu tip görüntülere binary image ya da
mask image denir. Gri tonlamalı resimleri
bizim seçeceğimiz ya da resmin geneline
göre otomatik ya da yarı otomatik eşik
değerlerine göre dönüştürme işlemi için
threshold ya da adaptiveThreshold
fonksiyonları kullanılıyor. Biz threshold
fonksiyonunu ele alalım.
double threshold(InputArray src,
OutputArray dst, double thresh, double
maxval, int type)
 src: Orijinal görüntü cv::Mat – Eğer
görüntü tek kanallı değil ise her kanal
Histogramlar
Histogram, istatiksel olarak elimizdeki
sayısal değerlerin sıklık dağılımını
göstermeye yarayan bir grafik türüdür.
void calcHist(const Mat* images,
int nimages, const int* channels,
InputArray mask, OutputArray hist,
int dims, const int* histSize, const
float** ranges, bool uniform=true,
bool accumulate=false)
 images: Görüntü işaretçisi yada
görüntünün tutulduğu dizi,
 nimages: Hesaplamada kullanılacak
görüntü sayısı,
 channels: Görüntünün çok kanallı
olması durumunda hangi kanalın
Geometrik Dönüşümler - Ebat Değiştirme
 En basit geometrik dönüşüm ebat
değiştirme işlemidir. Bu işlemi OpenCV’de
resize fonksiyonu ile yapabiliriz.
void resize(InputArray src, OutputArray dst,
size dSize, double fx=0, double fy=0, int
interpolation=INTER_LINEAR)
 src: İşlem yapılacak görüntü,
 dst: Ebadı değiştirilmiş görüntü,
 dSize: Yeni ebatlar,
 fx: X eksenindeki ebatlandırma katsayısı,
 fy: Y eksinindeki ebatlandırma katsayısı,
 interpolation: Ebatlandırma esnasında
piksel değerlerinin hesaplanma metodu.
INTER_NEAREST, INTE_LINEAR,
INTER_AREA, INTER_CUBIC,
INTER_LANCZOS4.
Geometrik Dönüşümler - Resim Döndürme
 OpenCV’de görüntü üzerinde dönme ve ebatlandırma
işlemleri yapılabilen affine diye adlandırılan bir matris
çarpımı temelli dönüşüm fonksiyonu mevcuttur. Bu
dönüşümün ana özelliği resimler üzerindeki
paralelliklerin korunmasıdır. Dönüşümü
uygulayabilmek için öncelikle dönüşüm matrisini
oluşturuyoruz. Affine dönüşümü için 2x3 ebatlarında
cv::Mat tipinde bir matris hazırlanabilir. Doğrudan
değerleri verilebileceği gibi getRotationMatrix2D
fonksiyonu ile de oluşturulabilir.
Mat getRotationMatrix2D( Point2f center, double angle,
double scale)
 center: Dönüşüm merkezinin koordinatı,
 angle: Derece cinsinden dönme açısı,
 scale: Dönüşüm ebatlandırma katsayısı (1
olduğunda değişiklik olmaz)
Geometrik Dönüşümler - Affine Dönüşümü
Affine dönüşüm fonksiyonu olan warpAffine’ı
tanımlayalım.
void warpAffine( InputArray src, OutputArray
dst, InputArray M, size dSize, int
flags=INTER_LINEAR, int
borderMode=BORDER_CONSTANT, const
Scalar& borderValue=Scalar())
 src: Dönüşüm uygulanacak görüntü,
 dst: Dönüşüm sonucu oluşturulan görüntü,
 M: Dönüşüm matrisi (2x3),
 dSize: Dönüşüm sonucu oluşturulacak
görüntünün ebadı,
 flags: resize fonksiyonundaki interpolation
parametresine benzer,
 borderMode: Dönüşüm sonrası çıkan boş
kalan kısımları dolduran parametre,
Fark Metodu ile Arkaplan Silme
Kamerada aldığımız görüntülerde bir süreklilik vardır. Peş peşe
devamlı görüntü akışı olur. Bu akan görüntülerde sabit olan
kısımlar aşağı yukarı sabit durur, fakat hareket halindeki
nesnelerin, konumları değiştiğinden, önceki konum ve sonraki
konumdaki renk değerleri değişir. Kameralarla görüntü almanın
ana sebebi de aslında bu hareketli nesnelerdir. Alınan
görüntülerin kısmen sabit olan alanına Arkaplan (background),
arkaplanı başarılı olarak modellediğimizde sonuç olarak
istediğimiz kısma önplan (foreground) denir. Bu farklılığı almanın
en basit yolu, anlık görüntülerden bir öncekini çıkarmaktır. Fark
için absdiff fonksiyonunu kullanabiliriz. Bu fonksiyon iki matrisin
farkının mutlak değerini verir.
Birbirini takip eden görüntüler absdiff fonksiyonu ile çıkarılıyor ve
fark ekranda gösteriliyor. Hareketli nesneleri sayabilmek için fark
görüntüsü üzerinde önce morfolojik işlemler uygulanır.
 Öncelikle fark görüntüsü siyah beyaz almalıyız.
Kaynaklar:
 http://docs.opencv.org/2.4/modules/refman.html
 http://docs.opencv.org/2.4/doc/tutorials/tutorials.html
 http://opencv.org/links.html
 http://opencv.org/quickstart.html

More Related Content

ODP
Özgür Yazılımlarla Görüntü İşleme
PDF
Görüntü i̇şlemede makine öğrenme teknikleri
PDF
Pratik caffe
PPTX
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
PDF
C gorsel-egitim
PDF
TÜBİTAK 2209
PDF
Caffe kılavuzu
PDF
Tedari̇k Zi̇nci̇ri̇ Opti̇mi̇zayonu
Özgür Yazılımlarla Görüntü İşleme
Görüntü i̇şlemede makine öğrenme teknikleri
Pratik caffe
Mobilya ve ev eşyalarının derin öğrenme ile 128 kategoride sınııflandırılması...
C gorsel-egitim
TÜBİTAK 2209
Caffe kılavuzu
Tedari̇k Zi̇nci̇ri̇ Opti̇mi̇zayonu

Similar to Image Processing with OpenCV (11)

PDF
C gorsel-egitim-seti
PDF
render ne demek.pdf
PPTX
Open cv kütüphanesi
PPT
Samet KiliçTaş, MüSlüM Dere, Fatma Davut çOk Dilli Sms
PPTX
Visual Studio Developer Tools
PDF
microprocessor insctruction
PPTX
Box volume measurement RGB-D_camera
PPT
başlıkk 11111
PPTX
progressokulu.com OpenEdge Replication Slide 2
PPTX
Clustering Analysis DBSCAN & SOM
PDF
Log yönetimi ve siem projelerindeki en önemli kriter EPS değerleri
C gorsel-egitim-seti
render ne demek.pdf
Open cv kütüphanesi
Samet KiliçTaş, MüSlüM Dere, Fatma Davut çOk Dilli Sms
Visual Studio Developer Tools
microprocessor insctruction
Box volume measurement RGB-D_camera
başlıkk 11111
progressokulu.com OpenEdge Replication Slide 2
Clustering Analysis DBSCAN & SOM
Log yönetimi ve siem projelerindeki en önemli kriter EPS değerleri
Ad

Image Processing with OpenCV

  • 2. Bilgisayarlı Görü Nedir?  Günümüzde kameralı donanımların ucuzlaması ve yaygınlaşması ile birlikte insanoğlunun değerlendirmesi gereken devasa büyüklükte görüntü verileri her an yığılmaya devam ediyor.  Her kavşakta rastlanan trafik kameralarından binalardaki güvenlik kameralarına, profesyonel cihazlardan herkesin cebinde taşıdığı mobil telefonlara kadar pek çok kaynaktan gelen görüntüler anlamlandırılmayı bekliyor.  İşlek bir cadde üzerine konumlandırılmış denetim kamerasını düşünün; yol durumunu sürekli kayıt altın alabilir. Ancak artık ihtiyaç duyduğumuz sadece devasa boyutlardaki bu görüntüyü saklamak değil, trafik kurallarını ihlal eden araçların plakalarını da otonom olarak tespit edebilmektir…  İşte Bilgisayarlı Görü ‘Computer Vision’ tam olarak bu ve benzeri ihtiyaçları karşılamak için ortaya çıkan bir kavramdır. Bu alanda başarılı bir kütüphane olan OpenCV sizlere tanıtılacaktır.
  • 3. OpenCV Nedir?  OpenCV; açık kaynak kodlu bir bilgisayarlı görü kütüphanesidir. Görüntü ve video işleme ile ilgili 500’den fazla temel ve ileri seviyedeki fonksiyonu, optimize edilmiş halleriyle barındırmaktadır. İlk olarak Intel’in Rusya’daki laboratuvarında 1999 yılında geliştirilmeye başlanmıştır.  OpenCV BSD lisansı altında dağıtılmaktadır. Başlangıçta C ile kodlanmasına rağmen, 2.0 ve 3.0 sürümleri ile gelişmiş bir C++ yapısını desteklemektedir. Bunun dışında Python, Java vb. diller ile de beraber kullanılabilir.  OpenCV platform ve işletim sistemi konusunda geniş bir yelpazeye hitap etmektedir. Windows, Linux, MacOS işletim sistemleri ile; Android, iOS, BBOS, WP vb. mobil cihazlarda; Ardunio, Raspberry PI, gibi platformlarda kullanılabilmektedir. Desteklenen Görüntü ve Video Formatları:  Windows Bitmaps: *.bmp, *.dib  JPEG Files: *.jpeg, *.jpg, *.jpe, *.jp2  Portable Network Graphics: *.png  Portable Image Format: *.pbm, *.pgm, *.ppm  Sun Rasters: *.sr, *.ras
  • 4. OpenCV Bileşenleri (OpenCV 3.0)  highgui: Ekranda pencereler açmak üzerinde görüntüleri göstermek gerektiğinde güncellemek; klavye ve fareden kullanıcı girişlerini almak gibi işleri yapan fonksiyonlardan oluşur.  imgcodecs: Görüntü yazma ve okuma işlemlerini yapar.  videoio: Video ya da kameradan görüntü yazma ve okuma işlemlerini yapar.  core: Genel veri yapıları, görüntü üzerinde çizim yapma, XML ve YAML yazma okuma işlevlerini barındırır.  imgproc: Görüntü işleme ile ilgili genel fonksiyonları barındırır. Filtreleme, Geometrik ve Renk Uzay Dönüşümleri, Yapısal Analiz ve Şekil eşleştirme vb. fonksiyonlarını içerir.  ml: Bayes, SVM, YSA ve benzeri yapay öğrenme algoritmalarından oluşur.
  • 5. OpenCV Kullanım Alanları  Askeri Endüstride yaygın olarak kullanılmaktadır.  Güvenlik, Radar, Astronomi, Trafik Sistemlerinde ve Kriminal Labaratuarlar da kullanılmaktadır.  Biyomedikal alanlarda kullanılmaktadır.  Uydu Görüntüleme de kullanılmaktadır.  Ölçeklendirme; Resmi istenilen boyutta büyültüp küçültme işlemlerinde kullanılmaktadır.  Döndürme; Resmi istenilen açı ile kendi ekseni etrafında çevrilme işlemlerinde kullanılmaktadır.  Yansıtma; Resmin kendi görüntüsü sabit kalıp, belli bir açı veya 180 derece açıyla (aynalama / mirror) işlemlerinde kullanılmaktadır.  Renk Düzeltmesi; Resmin üzerindeki renkleri istenilen tona göre ayarlanması işlemlerinde kullanılmaktadır.
  • 7. Renk  Renk: Cisimlerin yüzeylerinden yansıyan ışığın dalga boyu farklılığıdır. Gözle görünür ışık dediğimiz dalga boyu 700NM ve 400NM arasındadır.
  • 8. Renk Uzayları ve Renk Uzayı Dönüşümleri Renk çeşitliliğinin fazla olması nedeniyle bu renkleri gruplama ihtiyacı doğmuştur bu renkleri gruplamak ve standartlaştırmak için renk uzayı (color space) kavramı ortaya çıkmıştır. Her renk uzayı, renk kümesini tanımlamak için kendine özgü bir yapıya sahiptir. Değişik renk uzayları dönüşümü için OpenCV’nin cvtColor() fonksiyonu kullanılır. void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)  src: cv::Mat tipinde başlangıç görüntümüz.  dst: cv::Mat tipinde hedef görüntümüz.  code: Dönüşüm kodları hangi renk uzayından hangisine dönüştürüleceği bilgisin içerir. OpenCV tarafından tanımlanmıştır. GRAY Renk Uzayı Dönüşümleri: CV_RGB2GRAY => RGB’den GRAY’e dönüştürür. (Görüntü 3 kanaldan tek kanala düşer) CV_GRAY3RGB => GRAY’den RGB’ye dönüştürür. HSV Renk Uzayı Dönüşümleri: CV_RGB2HSV => RGB’den HSV’ye dönüştürür. CV_HSV2RGB =>HSV’den RGB’ye dönüştürür.
  • 9. Morfolojik İşlemler Morfoloji değişik bilim dallarında da kullanılan bir tabirdir ve biçim bilimi anlamına gelir. Nesnelerin görüntüdeki biçimleri hem diğer nesnelerden hem de arka plandan ayrıştırılması söz konusu olduğunda kullanılır. Başta (erosion) ve yayma (dilation) işlemleri olmak üzere, bunların farklı kombinasyonlarından türeyen işlemlere göz atacağız.  Aşındırma (Erosion): Belirginleştirdiğimiz kısmı küçültmek için kullanılır. (1)  Yayma (Dilation): Belirginleştirdiğimiz kısmı büyültmek için kullanılır. (2) Erosion ve Dilation işlemlerinin farklı kombinasyonları ile oluşturulan diğer morfolojik işlemler ise;  Open (Açma): Önce aşındırma, sonra yayma işlemi dilate(erode(src)),  Close (Kapama): Önce yayma, sonra aşındırma işlemi erode(dilate(src)),
  • 10. Morfolojik İşlemler void morphologyTransform(inputArray src, OutputArray dst, int op, inputArray karnel, Point anchor=Point(-1,1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar&borderValue=morphologyDefaultBorderValue())  src: Orijinal görüntü cv::Mat  dst: Hedef görüntü cv::Mat  op: Uygulanacak morfolojik işlem kodu MORPH_ERODE, MORPH_DILATE, MORPH_OPEN, MORPH_CLOSE, MORPH_GRADIENT, MORPH_TOPHAT, MORPH_BLACKHAT  karnel: Yapısal eleman – Uygulanacak işlemin hangi şekilde yapılacağını belirler cv::Mat  anchor: Yapısal elemanın dayan noktası konumu. Ön değeri (-1,-1) yapısal elemanın merkezini gösteriyor.  iteration: İşlemin uygulanma sayısı. REFERANS: http://docs.opencv.org/2.4/doc/tutorials/imgproc/opening_closing_hats/opening_closing_h ats.html
  • 11. Blur Fonksiyonları İle Filtreleme İşlemleri Blur, kelime anlamıyla bulanıklaştırma demektir. Genellikle resimdeki gürültüyü temizleme işlemleri için kullanılır. Bulanıklaştırma işlemi bir nesneyi ayrıştırmak için gürültülerin ortadan kaldırılması ya da en aza indirgenmesi ihtiyacı ile kullanılmaktadır. Farklı parametrelerle bulanıklaştırma işlemini yapan Blur, GaussianBlur, BoxFilter ve MedianBlur fonksiyonlarından biz GaussianBlur fonksiyonunu ele alacağız. void GaussianBlur( InputArray src, OutputArray dst, size kSize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)  src: Orijinal görüntü cv::Mat – Eğer görüntü tek kanallı değil ise her kanal için ayrı ayrı işlem yapılıp sonuç birleştirilir,  dst: Hedef görüntü,  kSize: İlk 3 fonksiyon için cv:Size tipinde işlem için kullanılacak çekirdek matris ebatları (en, boy),  sigmaX: Çekirdek için 2 boyutlu gauss eğrisi için eğrinin X eksenindeki standart sapması,  sigmaY: Çekirdek için 2 boyutlu gauss eğrisi için eğrinin Y eksenindeki standart sapması. REFERANS: http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highligh
  • 12. Kenar Bulma Fonksiyonları Bir fotoğraftaki nesneleri birbirinden ayırma metotlarından biri de kenar bilgilerine ulaşmaktır. Kenar bulma filtreleri bu değişimleri değişik metotlarla tespit eder. OpenCV’de hazır kodlanmış kenar bulma metodları Sobel, Laplacian, Scharr ve Canny’dir. Biz Laplacian metodunu ele alacağız. void Laplacian( InputArray src, OutputArray dst, int dDepth, int kSize=1, double scale=1, double delta=0, int borderType=BORDER_DEFAULT)  src: Orijinal görüntü cv::Mat – Eğer görüntü tek kanallı değil ise her kanal için ayrı ayrı işlem yapılıp sonuç birleştirilir,  dst: Hedef görüntü,  dDepth: Hedef görüntünün derinlik değeri -1 verildiğinde orijinal görüntü ile aynı olur,  kSize: Çekirdek kare matrisin ebadı,
  • 13. Eşik Filtreleme Resimde istediğimiz kısımların ayrıştırılması için son aşamada o veya değil durumuna getirmemiz gerekmektedir. Bu tip görüntülere binary image ya da mask image denir. Gri tonlamalı resimleri bizim seçeceğimiz ya da resmin geneline göre otomatik ya da yarı otomatik eşik değerlerine göre dönüştürme işlemi için threshold ya da adaptiveThreshold fonksiyonları kullanılıyor. Biz threshold fonksiyonunu ele alalım. double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)  src: Orijinal görüntü cv::Mat – Eğer görüntü tek kanallı değil ise her kanal
  • 14. Histogramlar Histogram, istatiksel olarak elimizdeki sayısal değerlerin sıklık dağılımını göstermeye yarayan bir grafik türüdür. void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=false)  images: Görüntü işaretçisi yada görüntünün tutulduğu dizi,  nimages: Hesaplamada kullanılacak görüntü sayısı,  channels: Görüntünün çok kanallı olması durumunda hangi kanalın
  • 15. Geometrik Dönüşümler - Ebat Değiştirme  En basit geometrik dönüşüm ebat değiştirme işlemidir. Bu işlemi OpenCV’de resize fonksiyonu ile yapabiliriz. void resize(InputArray src, OutputArray dst, size dSize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)  src: İşlem yapılacak görüntü,  dst: Ebadı değiştirilmiş görüntü,  dSize: Yeni ebatlar,  fx: X eksenindeki ebatlandırma katsayısı,  fy: Y eksinindeki ebatlandırma katsayısı,  interpolation: Ebatlandırma esnasında piksel değerlerinin hesaplanma metodu. INTER_NEAREST, INTE_LINEAR, INTER_AREA, INTER_CUBIC, INTER_LANCZOS4.
  • 16. Geometrik Dönüşümler - Resim Döndürme  OpenCV’de görüntü üzerinde dönme ve ebatlandırma işlemleri yapılabilen affine diye adlandırılan bir matris çarpımı temelli dönüşüm fonksiyonu mevcuttur. Bu dönüşümün ana özelliği resimler üzerindeki paralelliklerin korunmasıdır. Dönüşümü uygulayabilmek için öncelikle dönüşüm matrisini oluşturuyoruz. Affine dönüşümü için 2x3 ebatlarında cv::Mat tipinde bir matris hazırlanabilir. Doğrudan değerleri verilebileceği gibi getRotationMatrix2D fonksiyonu ile de oluşturulabilir. Mat getRotationMatrix2D( Point2f center, double angle, double scale)  center: Dönüşüm merkezinin koordinatı,  angle: Derece cinsinden dönme açısı,  scale: Dönüşüm ebatlandırma katsayısı (1 olduğunda değişiklik olmaz)
  • 17. Geometrik Dönüşümler - Affine Dönüşümü Affine dönüşüm fonksiyonu olan warpAffine’ı tanımlayalım. void warpAffine( InputArray src, OutputArray dst, InputArray M, size dSize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())  src: Dönüşüm uygulanacak görüntü,  dst: Dönüşüm sonucu oluşturulan görüntü,  M: Dönüşüm matrisi (2x3),  dSize: Dönüşüm sonucu oluşturulacak görüntünün ebadı,  flags: resize fonksiyonundaki interpolation parametresine benzer,  borderMode: Dönüşüm sonrası çıkan boş kalan kısımları dolduran parametre,
  • 18. Fark Metodu ile Arkaplan Silme Kamerada aldığımız görüntülerde bir süreklilik vardır. Peş peşe devamlı görüntü akışı olur. Bu akan görüntülerde sabit olan kısımlar aşağı yukarı sabit durur, fakat hareket halindeki nesnelerin, konumları değiştiğinden, önceki konum ve sonraki konumdaki renk değerleri değişir. Kameralarla görüntü almanın ana sebebi de aslında bu hareketli nesnelerdir. Alınan görüntülerin kısmen sabit olan alanına Arkaplan (background), arkaplanı başarılı olarak modellediğimizde sonuç olarak istediğimiz kısma önplan (foreground) denir. Bu farklılığı almanın en basit yolu, anlık görüntülerden bir öncekini çıkarmaktır. Fark için absdiff fonksiyonunu kullanabiliriz. Bu fonksiyon iki matrisin farkının mutlak değerini verir. Birbirini takip eden görüntüler absdiff fonksiyonu ile çıkarılıyor ve fark ekranda gösteriliyor. Hareketli nesneleri sayabilmek için fark görüntüsü üzerinde önce morfolojik işlemler uygulanır.  Öncelikle fark görüntüsü siyah beyaz almalıyız.