Ana içeriğe geç

Birinci Ders

Ders İçeriği:

  1. Resim Nedir?
  2. Görüntü İşleme Nedir?
  3. Pixel ve Vektör Kavramları
  4. OpenCV Nedir?
  5. OpenCV Yükleme
  6. Resim Okuma, Yazma, Kaydetme

1. Görüntü Nedir?

Görüntü Fiziksel dünyadaki bir cismin üzerinden yansıyan ışığın bir noktada toplanması ile oluşan yapıdır. Gözlerimiz görüntüyü 2 boyutlu ve 3 renkli şekilde algılar ve beynimize iletir.

Sanal görüntü ise kamera ve diğer görüntü elde etme araçları ile cisimlerin belirli şekillerde sanal ortamda ifade edilmesidir. Bu resimler farklı formatlarda kullanıcılara sunulabilir. Bu formatalara png, jpeg, jpg, gif, ve svg örnek verilebilir. Her bir formatın kendine ait bazı özellikleri vardır.

alternative text

2. Görüntü İşleme Nedir?

Görüntü işleme, dijital görüntülerin analizi, manipülasyonu ve işlenmesi için kullanılan bir bilgi işlem disiplinidir. Görüntü işleme teknikleri, bir veya daha fazla dijital görüntüyü alır ve bunları farklı amaçlar için kullanılabilir hale getirir.

Görüntü işleme teknikleri, temel olarak iki kategoriye ayrılabilir:

  1. Düşük seviye görüntü işleme: Görüntülerin temel özellikleri (örneğin parlaklık, kontrast, renk, kenarlar vb.) üzerinde işlem yapar. Bu işlemler, görüntülerin daha net, daha canlı veya daha kolay yorumlanabilir hale getirilmesine yardımcı olabilir.
  2. Yüksek seviye görüntü işleme: Görüntülerin anlamlı içeriği üzerinde işlem yapar. Bu işlemler, örneğin nesne tanıma, yüz tanıma, karakter tanıma ve görüntü sıkıştırma gibi daha karmaşık işlemleri içerir.

Görüntü işleme teknikleri, çok çeşitli uygulamalarda kullanılabilir. Bunlardan bazıları şunlardır:

  • Tıp: Röntgen, MR, ultrason ve tomografi gibi tıbbi görüntüleme teknolojileri, dokuların iç yapısını görüntülemek için kullanılır. Görüntü işleme teknikleri, bu görüntülerin analizi için kullanılabilir ve dokuların teşhisinde, tespitinde ve tedavisinde yardımcı olabilir.
  • Otomotiv: Görüntü işleme teknikleri, sürücüsüz araçlar, araç takip sistemleri ve park yardımcısı gibi otomotiv uygulamalarında kullanılır. Bu teknikler, araçların çevresini görüntüleyerek, nesneleri tespit ederek ve çarpışmaları önleyerek güvenliği artırabilir.
  • Güvenlik: Görüntü işleme teknikleri, kamera sistemleri, yüz tanıma sistemleri ve hareket algılama sistemleri gibi güvenlik uygulamalarında kullanılır. Bu teknikler, tehlikeli durumları tespit ederek, hırsızlıkları önleyerek ve suçluların yakalanmasına yardımcı olabilir.
  • Sanat: Görüntü işleme teknikleri, sanat eserlerinin restorasyonu, dijital sanat eserlerinin oluşturulması ve sanatsal ifadelerin analizi gibi sanatsal uygulamalarda kullanılır.

Görüntü işleme teknikleri, farklı sektörlerde birçok farklı uygulamada kullanılabilir ve hızla gelişen bir teknolojidir.

alternative text

3. Pixel ve Vektör Kavramları

Elbette, pixel ve vektör kavramlarını açıklayabilirim ve SVG ve JPG formatları arasındaki farkları da karşılaştırabilirim.

Pixel, bir dijital görüntünün temel bileşenidir ve bir piksel, görüntü üzerindeki en küçük renkli noktadır. Bir piksel, bir kare veya dikdörtgen şeklinde olabilir ve belirli bir renk ve parlaklık değeriyle tanımlanır. Bir pikselin boyutu, dijital görüntünün çözünürlüğüne bağlıdır ve daha yüksek çözünürlüklü bir görüntü, daha küçük pikseller içerecektir. Örneğin, 1080p çözünürlüğüne sahip bir televizyon, 1920 x 1080 piksel boyutunda bir görüntü oluşturur.

Vektör, matematiksel formüller ve eğriler kullanılarak oluşturulan bir grafik türüdür. Vektör grafikleri, sınırsız ölçeklenebilirlik özelliğiyle birlikte gelir, yani bir vektör grafik, ne kadar büyük veya küçük ölçeklenirse ölçeklensin her zaman net ve keskin kalacaktır. Vektör grafikler, piksel tabanlı (raster) grafiklerden farklı olarak, şekillerin ve çizgilerin keskinliğini korumak için hiçbir çözünürlük kaybı yaşamazlar. Vektör grafikleri, genellikle logolar, işaretler ve grafik tasarımları oluşturmak için kullanılır.

SVG (Scalable Vector Graphics) ve JPG (Joint Photographic Experts Group) formatları, farklı türde grafikleri depolamak ve paylaşmak için kullanılan iki farklı dosya biçimidir.

SVG, vektör grafiklerini depolamak için kullanılan bir dosya biçimidir. Bu dosya biçimi, grafiklerin sınırsız ölçeklenebilirliği ve internet üzerinde kolayca görüntülenebilmesi özellikleri sayesinde web tasarımında sıkça kullanılır. SVG dosyaları, kod tabanlı oldukları için dosya boyutları daha küçüktür ve hızlı bir şekilde yüklenirler.

JPG, piksel tabanlı (raster) grafikleri depolamak için kullanılan bir dosya biçimidir. Bu dosya biçimi, dijital fotoğrafların depolanması ve paylaşılması için yaygın olarak kullanılır. JPG dosyaları, sıkıştırma yöntemleri kullanılarak dosya boyutlarının küçültülmesine olanak tanır. Ancak sıkıştırma işlemi, görüntü kalitesinde kayıplara neden olabilir.

Genel olarak, SVG dosyaları vektör grafikleri depolamak için kullanılırken, JPG dosyaları diğer fotoğrafları saklamak için kullanılır.

4. OpenCV nedir ?

OpenCV (Açık Kaynak Bilgisayarlı Görüntü İşleme Kütüphanesi), bilgisayarlı görüntü işleme, makine görüşü ve yapay zeka gibi alanlarda kullanılan açık kaynaklı bir kütüphanedir. C++, Python ve Java gibi birçok programlama dilinde kullanılabilir.

OpenCV, video işleme, nesne tespiti, yüz tanıma, optik karakter tanıma (OCR), görüntü kalibrasyonu, stereo görüntüleme ve 3B modelleme gibi birçok görüntü işleme görevini gerçekleştirmek için kullanılabilir.

OpenCV, önceden tanımlanmış işlevleri içeren bir kütüphane olması nedeniyle, görüntü işleme uygulamaları oluşturmak için gerekli temel fonksiyonları sağlar. Bunun yanı sıra, kendi özelleştirilmiş işlevlerinizi de yazabilirsiniz.

OpenCV'nin açık kaynak olması, herkesin kaynak koduna erişebilmesini ve özgürce kullanabilmesini sağlar. Bu, görüntü işleme alanında çözümler geliştirmek isteyen araştırmacılar ve geliştiriciler için önemlidir.

alternative text

5. OpenCV Kurulum

OpenCV kurulumu için ilk olarak Python'ın bilgisayarınızda veya çalışma ortamınızda kurulu olması gerekmektedir. Bu kurulum gerçekleştirildikten sonra Opencv'yi pip paket yöneticisi kullanarak kurabiliriz.

![[Pasted image 20230510201258.png]]

Kurulumu sağlamak için anacondadan paketimizi aktif ettikten sonra alt kısımda bulunan kodu girmemiz gerekmektedir.

pip install opencv-python

Sonrasında Numpy ile opencv paketimiz yüklenmiş olacaktır.

6. Resim Okuma, Yazma, Kaydetme

Bundan sonra tüm opencv projelerinde de yapacağımız üzere ilk olarak opencv paketinin eklenmesi gerekmektedir. Bu paketi eklemek için import cv2 ifadesini kullanabiliriz. Bu kod sonrasında tüm kod dosyasının içesinde opencv adı ile opencv paketine erişebiliriz.

import cv2

6.1. Resim Okuma

OpenCV üzerinde hazıraldığımız resimleri imread() fonksiyonu ile okuyabiliriz. Bu fonksiyon içerisine dosya yolunu almaktadır.

resim = cv2.imread("../Veri/test.jpg")

Artık fotoğrafımızı resim adlı değişken içerisinde kaydettik. Peki nasıl kaydettik? Burada resimlerin ayrıntılarına girmemiz gerekir. JPG formatındaki resimler RGB değerlerinde pixeller halinde tutulur ve bu resimlerdeki pixeller array adını verdiğimiz dizilerde kaydedilir. Resmimizi görsel bir durumdan matematiksel bir yapıya getirmiş oluruz. Bizim gibi gözleri olmayan bilgisayarda bu sayılara bakarak asıl resmi görür.

alternative text

Dikkat etmemiz gereken içerisine aldığı dosya konumu hatalıysa bize bir uyarıda bulunsada kod çalışmaya devam eder ancak resmi none olarak ifade eder. OpenCV'deki hataların büyük bir kısmı bu durumdan kaynaklanmaktadır.

[ WARN:0@0.286] global /Users/runner/work/opencv-python/opencv-python/opencv/modules/imgcodecs/src/loadsave.cpp (239) findDecoder imread_('some/hatalı/konum.jpg'): can't open/read file: check file path/integrity

6.2. Resimleri Göstermek

Resimleri okuduk ancak diğelim ki hangi resmi eklediğimizi kontrol etmek istiyoruz yada bir değişiklik yaptık ve sonucu görmek istiyoruz. Bu durumda nasıl ekrana resmi gösterebiliriz?

Resimleri göstermek için 2 adet kabul gören yöntem bulunmaktadır. Bu yöntemlerden biri OpenCV içerisinde gömülü olarak gelen cv2.imshow() methodunu kullanmaktadır. Bu method içerisine 2 adet parametre almaktadır ve ilki resmin açılacağı pencerenin ismi olmaktayken diğer kısmı ise hangi resmin açılacağıdır.

cv2.imshow('resmim',resim) 
cv2.waitKey(0)
cv2.destroyAllWindows()

Bir diğer yöntem ise notebook içerisinde matplotlib kütüphanesini kullanmaktadır. Bu işlem için ilk olarak bu kütüphanenin pip ile kurulması gerekemtekedir.

pip install matplotlib

Matplotlib kütüphanesi içerisine girilen array formatındaki resimleri okuyabilmektedir. Bizler de opencv ile resimleri array formatında imread() sayesinde okuduğumuzdan dolayı matplotlib sayesinde kolaylıkla okuyabiliriz. Bu işlemi yaparken plt.imshow() methodunu kullanabiliriz.

plt.imshow(resim)

Kodumuzu çalıştırdığımızda bir hatanın olduğunu görüntüleyebiliriz. Bu hata renklerin ters olamsından kaynaklanmaktadır. Opencv resimleri BGR formatında okurken matplotlib RGB formatında okur. Resmi düzgün göstemek için bir dönüşüm yapmamız gerekmektedir. Bu dönüşümü cvtColor methodu ile gerçekleştirebiliriz.

resim2 = cv2.cvtColor(resim, cv2.COLOR_BGR2RGB)
plt.imshow(resim2)

6.3. Resimleri Kaydetmek

Resimlerimizi düzenledik ve kaydetmek istiyoruz diyelim, peki bunu nasıl yapacağız? Bu işlemi yapabilmek için imread fonksiyonunu kullanabiliiz. Bu fonksiyon ilk parametre olarak içerisine dosya konumunu almaktadır. İkinci parametre olarak da hangi resmi kaydetmek istediğimizi almaktadır.

cv2.imwrite('klasor/resmim.jpg', resim)