Python OpenCV ile Görüntüyü Yeniden Boyutlandırma

Merhaba. Bir önceki yazımda görüntüyü nasıl okuruz onu göstermiştim. Ve araya resim boyutlandırmadan küçük bir örnek göstermiştim. Bu yazımda OpenCV resize() metodunu biraz daha detaylı konuşmak istiyorum.

OpenCV resize() metodu, adından da belli olduğu gibi görüntüyü yeniden boyutlandırma işlemini yapıyor. Bir önceki yazdım da gösterdiğim kodu tekrar görelim;

import cv2
 
yukseklik = 640
genislik = 360
 
resim = cv2.imread("Desktop/ferdi.jpg")
 
resim = cv2.resize(resim, (genislik, yukseklik))
 
cv2.imshow("Ferdi Tayfur", resim)
 
cv2.waitKey(0)

Burada en, boy olarak biz belirtiyoruz. Oranları tutturana kadar deneme yanılma yöntemini uygulayarak bir çok kez kodu değiştirmek zorunda kalıyoruz. En boy oranını koruyarak görüntü bozulmadan nasıl küçültülür/büyütülür onu göstereceğim.

import cv2

img = cv2.imread("Desktop/ferdi.jpg")
cv2.imshow("Baslik", img)

def rescale(frame, scale=0.7):
    width = int(frame.shape[1] * scale)
    height = int(frame.shape[0] * scale)

    boyut = (width, height)
    return cv2.resize(frame, boyut, interpolation=cv2.INTER_AREA)

resized_image = rescale(img)
cv2.imshow("Baslik", resized_image)

cv2.waitKey(0)

scale=0.7 verdik. Ne kadar düşük yazarsanız o kadar boyutunu küçültecektir.
Benim resmin orijinal en/boy oranı 1075,1232’dir. Boyutlandırma işlemi yapıldıktan sonra 752,862 sonucuna ulaşıyorum. Sizde deneyerek daha iyi anlayabilirsiniz.

interpolation yönteminde kullanılan metotlar ve anlamları;

  • INTER_NEAREST: Enterpolasyon için en yakın komşu kavramını kullanır. Görüntüden yalnızca bir komşu piksel kullanan en basit yöntemlerden biridir. Görüntüyü yakınlaştırmak için kullanılır.
  • INTER_AREA: Yeniden örnekleme için piksel alanı ilişkisini kullanır. Görüntü boyutunu küçültmek için en uygun yöntemdir.
  • INTER_CUBIC: Görüntüyü yeniden boyutlandırmak için bikübik enterpolasyon‘u kullanır. Bu yöntem, yeni pikselleri yeniden boyutlandırırken ve enterpolasyon yaparken görüntünün komşu 4×4 piksellerine etki eder. Ardından, yeni enterpolasyonlu pikseli oluşturmak için 16 pikselin ağırlık ortalamasını alır.
  • INTER_LINEAR: Bu yöntem, INTER_CUBIC enterpolasyonuna benzer. Ancak, enterpolasyonlu piksel için ağırlıklı ortalamayı elde etmek için 2×2 komşu piksel kullanır.

Aynı işlem video/kamera içinde geçerlidir.

import cv2

def rescale(frame, scale=0.7):
    width = int(frame.shape[1] * scale)
    height = int(frame.shape[0] * scale)

    boyut = (width, height)
    return cv2.resize(frame, boyut, interpolation=cv2.INTER_AREA)

video = cv2.VideoCapture("Desktop/video.mp4")

while True:
    ret, frame = video.read()

    if not ret:
        break

    frame_resized = rescale(frame)

    cv2.imshow("Video", frame_resized)

    if cv2.waitKey(30) == ord('q'):
        break

📌 OpenCV ile ilgili yazılarıma bakmak için tıklayın.

📌 OpenCV ile ilgili tüm içeriğe buradan ulaşabilirsiniz. Bir başka yazıda görüşmek üzere. 🙋‍♂️