Opencv & Python #5
Opencv & Python serisine devam ediyoruz. Bu makalenin konusu ROI ve Bitwise işlemlerin nasıl yapıldığı.
In [1]:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
In [2]:
plt.subplot(121)
bw = cv.imread("bw.png")
plt.imshow(bw)
plt.subplot(122)
wb = cv.imread("wb.png")
plt.imshow(wb)
plt.show()

In [3]:
print("WB Shape\t" , wb.shape)
print("BW Shape\t" , bw.shape)WB Shape (487, 488, 3)
BW Shape (485, 487, 3)
Görüntülerimizin shape’lerinde ufak değişiklikler ikisinin shape’ini de (400,400,3) yapalım. Bunun için cv.resize() fonsiyonunu kullanacağız.
# resize görüntünün yeniden boyutlandırılmasını sağlar.
# Parametre olarak görüntünün yolunu/görüntüyü atadığımız değişkeni ve yeni boyutları (width, height) alır.
In [4]:
wb = cv.resize(wb, (400,400))
print(wb.shape)
bw = cv.resize(bw, (400,400))
print(bw.shape)(400, 400, 3)
(400, 400, 3)
Piksellere erişme
In [5]:
# Daha önce görüntünün array'ler şeklinde saklanmış olduğunu belirtmiltim. Array elemanlarına eriştiğimiz gibi piksellere erişim sağlayabiliriz.print(wb[0:2, 0:1, 0:1])
print(bw[0])[[[16]] [[28]]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
ROI(Region of Interest)
Görüntü üzerinde istenilen alan erişip üzerinde değişik yapmak için roi değişkeni kullanılır.
In [6]:
plt.figure(figsize=(25,15))plt.subplot(231)
plt.imshow(wb)
plt.title("Orjinal")plt.subplot(234)
plt.imshow(bw)
plt.title("Orjinal")##########################roi_wb = wb[70:320,70:320]
plt.subplot(232)
plt.imshow(roi_wb)
plt.title("ROI")roi_bw = bw[70:320,70:320]
plt.subplot(235)
plt.imshow(roi_bw)
plt.title("ROI")########################roi_wb = bw[70:320,70:320]
plt.subplot(233)
plt.imshow(roi_wb)
plt.title("ROI Changed")roi_bw = wb[70:320,70:320]
plt.subplot(236)
plt.imshow(roi_bw)
plt.title("ROI Changed")plt.savefig("roi.png")
plt.show()

Bitwise İşlemler
4 Tane bitwise işlem vardır.
- AND
- OR
- XOR
- NOT
In [7]:
bit_and = cv.bitwise_and(bw, wb)
bit_or = cv.bitwise_or(bw, wb)
bit_xor = cv.bitwise_xor(wb, bw)
bit_not_bw = cv.bitwise_not(bw)
bit_not_wb = cv.bitwise_not(wb)
In [8]:
plt.figure(figsize=(25,15))plt.subplot(131)
plt.imshow(wb)
plt.title("Orjinal WB")plt.subplot(133)
plt.imshow(bw)
plt.title("Orjinal BW")
plt.show()##########################
plt.figure(figsize=(25,15))
# AND lojik and ile aynı işlemi yapar
plt.subplot(131)
plt.imshow(bit_and)
plt.title("AND")# OR lojik or ile aynı işlemi yapar
plt.subplot(132)
plt.imshow(bit_or)
plt.title("OR")# XOR lojik xor ile aynı işlemi yapar
plt.subplot(133)
plt.imshow(bit_xor)
plt.title("XOR")
plt.show()########################
plt.figure(figsize=(25,15))
# NOT lojik not ile aynı işlemi yapar.(Götüntünün tersini alır.)
plt.subplot(131)
plt.imshow(bit_not_wb)
plt.title("NOT WB ")plt.subplot(133)
plt.imshow(bit_not_bw)
plt.title("NOT BW")
plt.show()



Görüntüleri birbirinin üzerine ekleme
Görüntüleri birbirinin üzerine eklemek için cv.addWeihted() komutu kullanılır 5 tane parametre alır
- İlk görüntü
- alpha (Ekleme yapıldıktan sonra ilk görüntünün ne kadar ağırlıkta olacağını belirler.
- İkinci görüntü
- beta (Ekleme yapıldıktan sonra ikinci görüntünün ne kadar ağırlıkta olacağını belirler.
- gamma İstenilen ağırlığa çekmek için kulllanlır.
dst = src1alpha + src2beta + gamma # Birleştirilen görütüntünün nasıl hesaplandığının matematiksel ifadesi.
Değerlerin ne yaptıklarını aşağıdaki kod çıktısında daha iyi gözlemleyebilirsiniz.
In [9]:
dst1 = cv.addWeighted(wb, 0.8, bw, 0.2, 0)
dst2 = cv.addWeighted(wb, 0.8, bw, 0.2, 100)
dst3 = cv.addWeighted(wb, 0.2, bw, 0.8, 0)
dst4 = cv.addWeighted(wb, 0.2, bw, 0.8, 100) plt.figure(figsize=(25,15))plt.subplot(331)
plt.imshow(wb)
plt.title("WB")plt.subplot(332)
plt.imshow(bw)
plt.title("BW")plt.subplot(334)
plt.imshow(dst1)
plt.title("ALPHA-0.8 BETA-0.2 GAMMA-0")
plt.subplot(335)
plt.imshow(dst2)
plt.title("ALPHA-0.8 BETA-0.2 GAMMA-100")plt.subplot(337)
plt.imshow(dst3)
plt.title("ALPHA-0.2 BETA-0.8 GAMMA-0")plt.subplot(338)
plt.imshow(dst4)
plt.title("ALPHA-0.2 BETA-0.8 GAMMA-100")
plt.show()

Kullanılan Kaynaklar
https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html