Aritmetik İşlemler

Created with Sketch.
  • Görüntüler üzerinde temel matematiksel işlemlerin nasıl yapıldığı hakkında bilgi sahibi olacaksınız.

1. Resimleri Toplama

cv2.add() fonksiyonunu kullanarak resimleri birbiri üzerine ekleyebiliyoruz. Biliyorsunuz resimler uint8 veri tipine sahiptir. Dolayısıyla basitçe bu veri tipinde 2 sayı oluşturarak toplama işlemi yapabiliriz.

import cv2
import numpy as np

x = np.uint8([130])
y = np.uint8([10])

print(cv2.add(x,y))

1-2. satırlarda gerekli kütüphaneleri ekledik. 3-4. satırlarda uint8 tipi iki sayı oluşturduk ve 7. satırda da bu verileri toplayıp çıktılarını aldık.

Bu işlemi resimler üzerinde yapabilmek dikkat etmemiz gerek husus, resimlerin boyutlarının aynı olması gerektiğidir. Çünkü sonuçta işlemler matris tabanlı yürüyor ve satır ve sütun sayıları eşit olmayan matrisleri toplayamayız.

2. Ağırlıklı Toplama

Ağırlıkla toplama işlemi, resimleri belirli yoğunluklarda birbiri üzerine ekleme işleminin adıdır. Matematiksel olarak olaya yaklaşacak olursak, aşağıdaki gibi bir fomülasyonu aslında resimlere uyguluyoruz.

Görüntüleri birbirleri üzerine ağırlıklı eklemek için cv2.addWeighted fonksiyonunu kullanırız. Fonksiyonun içerisine resimleri ve istediğimiz yoğunlukları gireriz.

import cv2

img1 = cv2.imread('x.png')
img2 = cv2.imread('z.jpg')

dst = cv2.addWeighted(img1,0.7,img2,0.3,0)

cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. Bitwise İşlemler

Mantık kavramı, kuramsal anlamda oldukça derin bir konudur. Tarihi hatırladığım kadarıyla antik yunana kadar gider. Lisedeki matematik derslerinde mantıksal işlemlerin ne anlama geldiğini öğrenmişsinizdir; ve, veya, ise…

Biz bu başlıkta 4 mantıksal işlemi, 4 temel fonksiyonla resimler üzerinde uygulayarak sonuçlarını yorumlayacağız. Aslında yapılan işlem her pikseli tek tek karşılaştırarak yeni bir piksel oluşturmaktır. Bu çalışmada kullanacağımız fonksiyonlar,

  • cv2.bitwise_and() : Karşılaştırılan her iki pikselde sıfırdan büyükse “True” döner.
  • cv2.bitwise_or() : Karşılaştırılan piksellerden biri veya her ikisi de sıfırdan büyükse “True” döner.
  • cv2.bitwise_xor() : Karşılaştırılan her iki pikselden sadece biri sıfırdan büyükse “True” döner.
  • cv2.bitwise_not() : Söz konusu resimdeki piksellerin “değilini” yani tersini alır.

Öncelikle, karşılaştırma yapabilmemiz için elimizde 2 resim olması gerekiyor. Bu resimleri NumPy kütüphanesini kullanarak oluşturalım ve saha sonra fonksiyonları tek tek uygulayarak çıktılara bakalım:

import cv2
import numpy as np

img1 = np.zeros((400,400), np.uint8)
white = (255,255,255)
cv2.rectangle(img1, (75,75), (325,325), white, -1)
cv2.imshow("Rectangle",img1)

img2 = np.zeros((400,400), np.uint8)
cv2.circle(img2, (200,200), 175, white, -1)
cv2.imshow("Circle",img2)

cv2.waitKey(0)
cv2.destroyAllWindows()

Kütüphaneleri ekledikten sonra sırasıyla siyah bir tuval üzerine bir kare ve diğer tuval üzerine de bir daire çizdirdik. Daha sonra bunlara cv2.imshow() ile baktık. Çıktılar aşağıdaki gibi:

Şimdi bu görüntüleri mantıksal işleçler ile tek tek karşılaştıralım ve çıktılara bakalım:

bitwiseAnd = cv2.bitwise_and(img1, img2)
bitwiseOr = cv2.bitwise_or(img1,img2)
bitwiseXor = cv2.bitwise_xor(img1, img2)
bitwiseNot = cv2.bitwise_not(img2)

Şimdi bunları görüntüleyelim. Bu aşamada matplotlib kütüphanesine ihtiyacımız olacak. Çünkü görüntülerin orjinal halleriyle birlikte, aynı anda açmamız gereken toplamda 6 resim var. Bunları tek tek cv2.imshow() ile görüntülemek yerine matplotlib ile tek bir pencerede inceleyeceğiz:

titles = ["Rectangle", "Circle", "Bitwise And", "Bitwise Or", "Bitwise Xor", "Bitwise Not"]
images = [img1, img2, bitwiseAnd, bitwiseOr, bitwiseXor, bitwiseNot]

for i in range(6):
    plt.subplot(2, 3, i+1)
    plt.imshow(cv2.cvtColor(images[i],cv2.COLOR_RGB2BGR))
    plt.title(titles[i])
    plt.xticks([])
    plt.yticks([])

plt.show()