Basit İşlemler

Created with Sketch.
  • Piksellere erişme ve özelliklerini değiştirme
  • ROI kavramını anlama
  • Resmi ayrıştırma ve birleştirme

Görüntü işlemeyle uzun süredir ilgilenen biri olarak nasıl projelerle çalışırsam çalışayım her daim kullandığım bazı yöntemler vardır. El hareketlerini algılamadan, göz kırmayı farketmeye kadar her türlü tasarıda kullandığım ve bu işe ilgili olan herkesin başlıca öğrenmesi gereken şeylerden biri resmi doğru yönetmektir. Bu nedenle bu başlıkta sizlere basit ama en önemli işlemlerden bahsedeceğim.

>Buraya Tıklayarak Kaynak Kodları ve Çalışma Dosyalarını İndirebilirsin <

1. Pikseller

Görüntü işlemede ilerlemek, piksellere hükmetmekten geçer, bunun için de pikselleri iyi anlamalıyız. Şimdi bir resim yükleyelim ve çalışmaya başlayalım.

import cv2
import numpy as np

img = cv2.imread("klon.jpg")

Piksellerin ne anlama geldiğini daha önceki yazılarımda anlatmıştım. Hatırlarsanız piksellerin içinde 3 adet renk saklıydı; mavi,yeşil ve kırmızı.

Şimdi yüklediğimiz resimdeki herhangi bir pikselin sahip olduğu renge bakalım:

color = img[150, 200]
print(color)

Dipçe: Piksel değerinin resimden büyük olmamasına dikkat edin. Resmin dışına taşmasın. Peki resmin boyutunu nasıl öğrenebiliriz ? Bu konuya ikinci başlıkta değineceğim. Şimdilik resim dosyasına sağ tıklayıp özellikler diyerek öğrenebilirsiniz.

İlk satırda resmin 150×200 pikselindeki renk değerlerini color değişkeninde sakladık ve ikinci satırda da bu değerleri yazdırdık. Karşınıza 3 değerin saklandığı [b,g,r] gibi bir liste gelecek. Bu listedeki ilk değer 150×200 pikselindeki mavi yoğunluğu, ikincisi yeşil ve üçüncüsü de kırmızı yoğunluğu olacak.

Bu resmin [150,200] pikselindeki renk değerini [158 153 144] olarak buldum.

Eğer 150×200 pikselindeki sadece mavi yoğunluğunu görmek istiyorsak, şöyle bir kod yazabiliriz:

blue = img[150,200,0]
print(blue)

Burada oluşturduğumuz listedeki 0’ın anlamı pikselde tutulan B yani mavi değeridir. Sonuç olarak 158 çıktısını alırız.

Şimdi bu değeri değiştirelim. Resmin ilgili pikselindeki mavi yoğunluğunu 250’ye çekelim:

img[150,200,0] = 250
print(img[150,200,0])

Bu işlemeleri daha kolay yapmamızı sağlayan bir metotta mevcut. Ben size bu yolu kullanmanızı tavsiye ediyorum:

blue = img.item(150,200,0)
print(blue)

img.itemset((150,200,0),250)
print(img[150,200,0])

Gördüğünüz gibi önce img.item ile ilgili pikselin mavi değerini gördük. Daha sonra img.itemset() ile de bu değeri 250’ye çektik.

2. Resim Özellikleri

Bir resmin iki önemli özelliği vardır. Boyutu ve kanal verisi. Bu iki özellik bize resim ile ilgili 2 önemli şeyi anlatır. Boyutu resmin ne kadar büyük olduğunu, kanal verisi ise resmin renkli mi yoksa siyah-beyaz mı olduğunu anlatır.

import cv2
import numpy as np

img = cv2.imread("star_wars.jpg")

shape = img.shape
print(shape )

img.shape, 3 değer döndürür. ilk ikisi resmin boyutu ve üçüncüsü kanal verisidir. Kanal verisi 3 ise resim renkli demektir.

Kodları çalıştırdığımızda incelediğimiz klon resminin (426, 640, 3) şeklinde bir yapıya sahip olduğunu görürüz.

3. ROI

Bu makaleyi tamamlamadan önce öğrenmemiz gerekn son bir şey kaldı: ROI -> region of interest, yani resim üzerinde ilgilendiğimiz alan.

ROI kavramını şöyle açıklayayım:

Örneğin, bir resimdeki yüzle ilgileniyoruz. O halde resimdeki ilgi alanımız yani ROI’miz yüzdür. Önce yüz algılama algoritmalarıyla yüzün bulunduğu koordinataları buluruz daha sonra bu yüzü tüm resimden ayırırız. İşte ROI’mizi elde etmiş olduk.

Şimdi klon asker resmimizdeki yüz/kafa bölgesini resmin geri kalanından ayırarak ROI’mizi resimden çıkaralım.

import cv2

img = cv2.imread("klon.jpg")
face= img[30:200, 200:400]

cv2.imshow("ROI",face)
cv2.waitKey(0)
cv2.destroyAllWindows()

Yorum yapılmamış

Yorumunuzu ekleyin