OpenCv’de Video Çözünürlüğü ve Skalalama İşlemi

Merhaba arkadaşlar, Mobilhanem.com sitemizde Python ile Görüntü İşleme Dersleri eğitim serisine kaldığımız yerden devam ediyoruz. Geçen dersimizde OpenCv’de Video Boyutlandırma ve Gri Tonlamadan bahsettik. Python ile Görüntü İşleme dersinde bu hafta ise OpenCv’de Video Çözünürlüğü ve Skalalama İşlemi konularından bahsedeceğiz. Eğer bir önceki dersimizi inceleme fırsatınız olmadıysa OpenCv’de Video Boyutlandırma ve Gri Tonlama  dersimize buradan ulaşabilirsiniz

Temel Video ve Kamera İşlemleri dersimizde işleyeceğimiz konu başlıklarını tekrar sıralayalım.

  • Kameradan Görüntü Alma ve Video Okuma İşlemi
  • Video Boyutlandırma ve Gri Tonlama İşlemi
  • Video Çözünürlüğü ve Skalalama İşlemi
  • Video Kaydetme ve Döndürme İşlemi

Listemizden sırayla ilerlemeye devam ediyoruz. Video Boyutlandırma ve Gri Tonlama İşlemi konusunu geçen dersimizde bitirmiştik. Bu haftaki konumuz olan OpenCv’de Video Çözünürlüğü ve Skalalama İşlemi dersine başlayabiliriz.

Video Çözünürlüğü

Pycharm üzerinden yeni bir python dosyası açarak video çözünürlük işlemimize adımımızı atalım.

Geçen dersimizde kameradan görüntü alma işlemini göstermiştim. Opencv kütüphanemizi ekledikten sonra ilk olarak bilgisayar kamerasından görüntü alma komutumuzu yazalım.

import cv2

kamera = cv2.VideoCapture(0)

Bildiğiniz üzere 0(sıfır) paremetresi bilgisayar kameramız içindi. Eğer harici kameralarınız var ise bu parametre sayısını artırarak (1,2,3) harici kameranıza erişim sağlayabilirsiniz. Şimdi çözünürlüklerimize göre fonksiyonlarımızı hazırlayalım. Bu kısımda 1080p,720p ve 480p oranlarını kullanacağım. Ayrıca kullanıcının kendi belirlediği çözünürlükleri ayarlayabilmesi için de ayrı bir fonksiyon oluşturacağız.

import cv2

kamera = cv2.VideoCapture(0)

def cozunulukAyarla_1080p():
    kamera.set(3, 1920)
    kamera.set(4, 1080)


def cozunulukAyarla_720p():
    kamera.set(3, 1280)
    kamera.set(4, 720)

def cozunulukAyarla_480p():
    kamera.set(3, 640)
    kamera.set(4, 480)

def kullaniciCozunurlukAyarla(genislik, yukseklik):
    kamera.set(3, genislik)
    kamera.set(4, yukseklik)

Yukarıdaki kod bloğunda gördüğünüz kamera.set fonksiyonu içerisinde yer alan ilk sayısal parametredeki 3 değeri kameradan alınan görüntünün genişlik değerine, 4 değeri ise yükseklik değerine erişim sağlayabilmek için kullanıyoruz.

Aşağıdaki kod bloğumuzda yer alan ” No-1 ” açıklama satırının olduğu yerde istediğimiz çözünürlükte olan fonksiyonumuzu çağırıyoruz. Son olarak while döngümüzü kullanarak görüntümüzü ekranda gösterelim ve klavyeden “x” tuşuna bastığımız anda görüntümüzü kapatan kodumuzu yazalım.

import cv2

kamera = cv2.VideoCapture(0)


def cozunulukAyarla_1080p():
    kamera.set(3, 1920)
    kamera.set(4, 1080)


def cozunulukAyarla_720p():
    kamera.set(3, 1280)
    kamera.set(4, 720)


def cozunulukAyarla_480p():
    kamera.set(3, 640)
    kamera.set(4, 480)


def kullaniciCozunurlukAyarla(genislik, yukseklik):
    kamera.set(3, genislik)
    kamera.set(4, yukseklik)


cozunulukAyarla_1080p()  # No-1

while True:
    ret, cerceve = kamera.read()
    cv2.imshow('Kamera Goruntusu', cerceve)

    if cv2.waitKey(20) & 0xFF == ord('x'):
        break
kamera.release()
cv2.destroyAllWindows()

 

Skalalama İşlemi

Görüntü skalalaması bir nevi görüntünün yeniden boyutlandırılmasıdır. Görüntünün boyutunu manuel olarak belirleyebilir ve ölçeklendirme işlemi yapabilirsiniz.

Skalalama işlemi için yeni bir python dosyası oluşturalım ve skalalama işlemimize başlayalım. Dilerseniz mevcut projeniz üzerinden de devam edebilirsiniz.

İlk olarak skalalama işlemini yapacak fonksiyonumuzu hazırlayalım.

import cv2

kamera = cv2.VideoCapture(0)

def skalalamaIslemi(cerceve,yukdelikOran): # No-0

    genislik=int((cerceve.shape[1]*yukdelikOran) / 100) # No-1
    yukseklik = int((cerceve.shape[0] * yukdelikOran) / 100) # No-2
    yeniBoyut=(genislik,yukseklik) # No-3
    return cv2.resize(cerceve,yeniBoyut,interpolation=cv2.INTER_AREA) # No-4

Oluşturduğumuz fonksiyonu adım adım inceleyelim. Fonksiyonumuz iki adet parametre alıyor. İlk parametremiz kameradan aldığımız görüntü, ikinci parametremiz ise skalalama oranımızdır (No:0 (sıfır)). Daha sonra aldığımız görüntünün genişlik (shape[1]) ve yükseklik (shape[0]) oranlarını, girdiğimiz yukseklik oran parametresine göre yüzdelik halini hesaplayıp yeni değer olarak alıyoruz.(No:1 ve No:2). Artık yeni genişlik ve yükseklik değerleri ile yeni bir görüntü boyutunu hazır hale getirdik (No-3). En son geriye dönen değer ise kamera görüntümüzün yeniden boyutlandırılmış halidir.

Şimdi fonksiyonumuzu döngümüz içerisinde kullanalım.

import cv2

kamera = cv2.VideoCapture(0)

def skalalamaIslemi(cerceve,yukdelikOran): # No-0

    genislik=int((cerceve.shape[1]*yukdelikOran) / 100) # No-1
    yukseklik = int((cerceve.shape[0] * yukdelikOran) / 100) # No-2
    yeniBoyut=(genislik,yukseklik) # No-3
    return cv2.resize(cerceve,yeniBoyut,interpolation=cv2.INTER_AREA) # No-4

while True:
    ret, cerceve = kamera.read()
    oranliCerceve=skalalamaIslemi(cerceve,30) # No-5
    cv2.imshow('Kamera Goruntusu', cerceve)
    cv2.imshow('Kamera Goruntusu (SKALALAMA YAPILMIS GORUNTU)', oranliCerceve) # No-6
    if cv2.waitKey(20) & 0xFF == ord('x'):
        break
kamera.release()
cv2.destroyAllWindows()

Döngümüz içerisinde görmüş olduğunuz oranlı çerçeve değişkenimize skalalama yaptığımız fonksiyondan geriye dönen yeniden boyutlandırılmış görüntü değerlerini gönderdik (No: 5). Parametre olarak gönderdiğim 30 değeri ile mevcut görüntünün çerçeve boyutunun %30 oranı kadar yeni bir çerçeve boyutu ortaya çıkacaktır.

 

Yukarıdaki videoda da gördüğünüz üzere gerçek pencere boyutunun %30’luk ölçeği alınarak yeni bir pencere oluşturduk.

Mobilhanem.com da Python ile Görüntü İşleme serisinde bir dersin daha sonuna geldik. Bu hafta Python ile Görüntü İşleme dersimizde OpenCv’de Video Çözünürlüğü ve Skalalama İşlemi ‘nden bahsettik. Umarım sizin için faydalı bir yazı olmuştur. Bir sonraki  Video Kaydetme ve Döndürme İşlemi dersinde görüşmek üzere. Eksik ya da yanlış gördüğünüz bir şey varsa lütfen iletişime geçmekten çekinmeyin. Sorularınızı buradan sorabilirsiniz.

Tüm Görüntü İşleme Dersleri için tıklayınız.

Kaynak: Link1

9

Yunus Emre Aydın

Yazılım Mühendisi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?