Opencv & Python #2
Opencv — Görüntü Okuma ve Görüntüleme
Görüntü işleme tekniklerini daha rahat anlamak için matrisleri hakkında bilgi sahibi olmak önemli. Bilgisayar bilimlerinde matrisler önemli bir yer kaplıyor çünkü veri saklama ve işleme gibi işlemleri daha efektif bir şekilde yapmamıza imkan sağlıyor. Matrisler özellik bilgisayar grafik alanın da kullanılıyor mesela bir görüntüyü saklarken pikselleri matrisler halinde saklıyor. Matrisin bilgisayardaki karşılığı aslında array veri tipidir.Şimdi bir görüntü okuyup nasıl saklandığına bakalım.
İlk olarak kütüphanelerimiz ekleyelim. Görüntü işlemleri için Opencv kütüphanesini ve array işlemlerimiz için ise Numpy kütüphanesini ekliyoruz. Ek olarak Matplotlib kütüphanesi ekledim bu kütüphaneyi grafik çizmek için kullanacağız.
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
Görüntüyü okumak için imread() komutunu kullanacağız.
imread() fonksiyonu iki parametre alıyor.
- İlk parametre görüntünün yolu(path) eğer görüntü çalıştınız dizinde değilse tam yolunu girmeniz gerekir.
- İkici parametre ise okuma modu yani götüntüyü rgb (red, green, blue), gray _scale formatta mı okuyacağınız bilgisi. Default olarak rgb formatında tanımlıdır. Başka bir modada okumak istiyorsanız belirtmeniz gerekir.
img = cv.imread("opencv.png") # Görüntüyü okuyup img adlı değişkene atıyoruz.
print fonksiyonu ile img değişkeninin içinde ne olduğuna bakalım.
print(img)
print(type(img))
[[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
...
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]]
<class 'numpy.ndarray'>
Hem çıktısına hem de veri tipinden de görüldüğü üzere görüntümüz bilgisayar tarafında array olarak algılanıyor.
Şimdi de görüntümüzün boyutlarını öğrenelim.
img.shape
(1478, 1200, 3)
Shape özelliği bize üç elemanlı bir tuple return ediyor.
- ilk eleman satır bilgisini,
- ikinci eleman sütun bilgisini,
- üçüncü eleman ise kanal bilgisini belirtir. Kanal bilgisi bize görüntünün rgb mi yoksa gray_scale mı olduğunu da belirtir. 3 olması demek görüntünün rgb formatta olduğunu gösterir.Her renk için bir kanal oluşturur. Eğer görüntü gray_scale olsaydı 1 katman olacaktı dolayısıyla (1478, 1200) şeklide bir boyuta sahip olacaktık.
Görüntünün toplam piksel sayısını öğrenmek için size özelliği kullanılır.
img.size
5320800
size = satır*sütun*boyut
Okuduğumuz götüntüyü ekrana bastırmak için imshow komutu kullanırlır. Ekrana bir pencere açar ve görüntüyü basar.
imshow() iki parametre alır.
- ilk parametre pencerenin başlık bilgisidir.
- ikinci parametre görüntünün tutulduğu değişkenin adı.
cv.imshow('image',img)
cv.waitKey(0) # Pencereyi kapatmak için klavyeden herhangi bir tuşa basılmasını bekler.
cv.destroyAllWindows() # Pencereyi kapatır.

Yukarıda farklı okuma modları olduğunu söylemiştik. Şimdi bu modları inceleyelim.

# En çok kullanılan modları birlikte inceleyelim
# Görüntüyü alfa kanalı da dahil olmak üzere yükler. (Alfa kanalı görüntünün arka planındaki saydamlığı belirtir.)
img_IMREAD_UNCHANGED = cv.imread("opencv.png", cv.IMREAD_UNCHANGED) # 4 kanal oluşur
# Görüntüyü siyah-beyaz(gray_scale) olarak okur.
img_IMREAD_GRAYSCALE = cv.imread("opencv.png", cv.IMREAD_GRAYSCALE) # 1 kanal oluşur
# Görüntüyü renkli(rgb) olarak okur
img_IMREAD_COLOR = cv.imread("opencv.png", cv.IMREAD_COLOR) # 3 kanal oluşurprint("UNCHANCED shape\t", img_IMREAD_UNCHANGED.shape, "\nCOLOR shape\t", img_IMREAD_COLOR.shape, "\nGRAYSCALE shape\t", img_IMREAD_GRAYSCALE.shape)
UNCHANCED shape (1478, 1200, 4)
COLOR shape (1478, 1200, 3)
GRAYSCALE shape (1478, 1200)



Görüntüleme işlemini matplotlib kütüphanesini kullanarak da yapabiliriz
img = cv.imread('python.png',0) # 0 görüntünün grayscale moda okunmasını belirtir.
plt.imshow(img, cmap='gray') # Grafiğin grayscale olacağını belirttik default olarak rgb tanımlı belirtmezsek grafik renkli basılır.
plt.axis('off') # x ve y eksenlerini gizledik.
plt.show()

image = cv.imread('python.png',1)
plt.axis("off")
plt.imshow(cv.cvtColor(image, cv.COLOR_BGR2RGB)) # Gösterimde sorun olduğu için renk dönüşümü yaptım.
plt.show()
