Opencv & Python #5

Seda Kayademir
3 min readMar 31, 2020

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

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Seda Kayademir
Seda Kayademir

No responses yet

Write a response