Python – Görüntü İşleme: Görüntü Okuma (OpenCV)

 

 

Hedefler

  • Görüntü okumayı, bunu görüntülemeyi ve geri kaydetmeyi,
  • Birkaç cv2.imread(), cv2.imshow(), cv2.imwrite() gibi fonksiyonları kullanmayı,
  • İsteğe bağlı, Matplotlib ile nasıl görüntüleri gösterebileceğimizi öğreneceğiz.

Görüntü Okuma

Görüntü okumak için cv2.imread() fonksiyonunu kullanacağız. Görüntü çalışma dizininde olmalıdır ya da tam adresi verilmelidir.

İkinci argüman görüntünün nasıl okunacağı ile ilgi bir bayraktır.

  • IMREAD_COLOR: Renkli görüntü yükler. Görüntünün herhangi şeffaflığı ihmal edilecektir. Varsayılan bayraktır.
  • IMREAD_GRAYSCALE: Gri tonlamalı resim yükler.
  • IMREAD_UNCHANGED: Alfa kanalı ile yükler.

Not: Bu üç bayrak parametresi yerine sırasıyla basit 1, 0 veya -1 sayılarını kullanabilirsiniz.

Kod örneği:

import numpy as np
import cv2

# Gri tonlamalı resim yükleme
img = cv2.imread('deneme.jpg', 0)

Uyarı: Eğer görüntü yolu yanlış ise hiçbir hata çıktısı almayacaksınız, hatta print img size None cevabını döndürecektir.

Görüntü Görüntüleme

Bir pencerede görüntü/resim görüntülemek için cv2.imshow() fonksiyonu kullanacağız. Bu pencere otomatik olarak resim boyutuna göre ayarlanacaktır.

İlk parametre bir string olup pencere ismidir. İkinci parametre ise bizim görüntümüz. İstediğiniz gibi birçok pencere oluşturabilirsiniz, ama farklı pencere adlarıyla.

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


 

Pencerenin nasıl gözüktüğü ile ilgili bir ekran görüntüsü (Windows 8.1’de):

screenshot

Klavye metodu için cv2.waitKey() kullanılır. Alacağı parametre milisaniye cinsinden zamandır. Bu fonksiyon herhangi bir klavye olayı için belirtilen süre kadar bekler. Hiçbir şeye basılmadığında program devam eder. Eğer 0 yazılırsa tuşa basılması için sonsuza kadar bekler. Bunu farklı tuş algılamaları içinde kullanabiliriz, ESC gibi önemli tuş basılması gibi durumları ileride tartışacağız.

Yarattığımız pencereleri kapatmak için tabiri caizse yıkmak için cv2.destroyAllWindows() kullanacağız. Eğer belirlenen bir pencereyi kapatmak için cv2.destroyWindow()’a parametre olarak pencere adını girebiliriz.

Not: Pencere yaratmak ve görüntü yüklemek de özel durumlar söz konusu olabilir. Bu durumda, pencerenin yeniden boyutlandırılabilir olup olmadığını belirleyebilirsiniz. Bunun için cv2.namedWindow() kullanılabilir. Varsayılan parametresi cv2.WINDOWS_AUTOSIZE’dır. Ama parametre cv2.WINDOW_NORMAL olarak belirtilirse, pencereyi yeniden boyutlandırabilirsiniz. Boyutların büyük olduğu görüntülerde işimize yarayacaktır ve pencerenin barına iz eklenecektir.

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

Görüntü Yazma

Görüntü yazmak/kaydetme için cv2.imwrite() fonksiyonu kullanacağız.

İlk parametre dosya adı, ikinci parametre kaydetmek istediğiniz görüntü adı olacaktır.

cv2.imwrite('messigray.png',img)

 

Bu çalıştığımız dizine PNG formatında kaydedecektir.

Özetle

Görüntüyü gri tonlamalı açar, s’ye basılırsa kaydeder veya ESC ye basılırsa çıkış yapan bir program;

import numpy as np
import cv2

img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0) & 0XFF
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
    
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

 

 

Uyarı: Eğer 64-bit makine kullanıyorsanız, k = cv2.waitKey(0) komut satırında şöyle bir değişiklik yapmalısınız: k = cv2.waitKey(0) & 0xFF

Hakan Kaya
Yarı zamanlı mühendis. Yarı zamanlı eğitmen. Biraz da film sever.
error: 5846 sayılı Fikir ve Sanat Eserleri Kanunu tarafında içeriklerin izinsiz kopyalanması, paylaşılması ve çoğaltılması yasaktır.