Opencv & Python #3

Seda Kayademir
3 min readMar 29, 2020

Bu makalemizde görüntünün renk değerlerine bakacağız ve video okuma, yazma işlemlerini inceleyecğiz. Kütüphanelerimizi ekleyerek başlayalım.

In [1]:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import imageio

Renk aralıkları

Pikseller 0'dan 255'e kadar değer alabilir. 0 siyah rengi 255 ise beyaz rengi temsil eder.

In [2]:

img_zeros = np.zeros((512,512,3), np.uint8) # Burada 512 512 boyutlarında 3 kanallı bir görüntü oluşturduk. np.zeros komutu 0'lardan oluşan matris üretir.
img_bw = cv.imread('bw.jpg', 1)
img_color = cv.imread('color.jpg', 1)

Şimdi hem kendi oluşturduğumuz hemde okuduğumuz görüntülerin histogram grafiklerine bakalım. Histogram grafiği bize renk dağılımını gösterecek.

In [3]:

plt.figure(figsize=(25,15))plt.subplot(331)
plt.imshow(img_zeros)
plt.axis('off')
plt.subplot(334)
plt.hist(img_zeros.ravel(), 256, [0,256])
plt.subplot(332)
plt.imshow(img_color)
plt.axis('off')
plt.subplot(335)
plt.hist(img_color.ravel(), 256, [0,256])
plt.subplot(333)
plt.imshow(img_bw)
plt.axis('off')
plt.subplot(336)
plt.hist(img_bw.ravel(), 256, [0,256])
plt.show()

Kendi ürettiğimiz götüntü dışında görüntü siyah beyaz olsa dahi histogram grafiğinin belli bir aralıkta dağılmış olduğunu gördün bunun sebebi görüntünün üzerine düşen ışık. Işıktan dolayı renk tonunda farklılıklar bu detayı renk ile nesne takibi yaparken kullanacağız.

Şimdi video işlemlerine bakalım

In [4]:

cap = cv.VideoCapture("cat.mp4") # VideoCapture komutu videoyu okumamızı sağlılıyor. 
# Eğer webcam ile çalımak istiyorsanız cv.VideoCapture(0) komutu ile okuma yapabilirsiniz
# Okuma devam ettikçe çalışacak bir döngü kuruyoruz.
while cap.isOpened():
# Gelen videoyu kareler şeklinde okuyoruz
ret, frame = cap.read()
# ret akışın devam ettiğini göterir tüm videoyu kare kare okuyoruz kareler bittiğinde ret değeri False oluyor ve döngü sonlandırılıyor.
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) # Okuduğumuz kareleri hsv renk uzayına çevirdik.
# Videoda beyaz bir kedi var ve biz bu beyaz kediyi tespit etmek için beyaz rengin hsv kod aralığını kullanıyoruz.
# Başka bir renk üzerinden nesne tespiti yapmak istiyorsanız arama yaparak uygun değerlere göre değişiklik yapmalısınız.
sensitivity = 20
lower_white = np.array([0,0,200-sensitivity])
upper_white = np.array([255,sensitivity,255])
# hsv aralığına göre maske oluşturuyoruz.
mask = cv.inRange(hsv, lower_white, upper_white)
# Görüntümüzü maske ile and'leyerek beyaz olan kısımları buluyoruz.
res = cv.bitwise_and(frame, frame, mask=mask)

cv.imshow("frame", frame)
cv.imshow("mask", mask)
cv.imshow("result", res)

if cv.waitKey(5) == ord('q'): # Döngüyü sonlandırmak için klavyeden q tuşuna basılmasını bekliyoruz.
break
cap.release() # Videoyu serbest bırakıyoruz.
cv.destroyAllWindows() # Tüm pencereleri kapatmak için kullanıyoruz.
Can't receive frame (stream end?). Exiting ...

FSP : Saniyelik Görüntü Sayısı ya da çerçeve oranı, saniyedeki çerçeve sayısı ve çerçeve frekansı olarak da bilinir, bir görüntüleme aygıtının ürettiği çerçeve adı verilen benzersiz sıralı görüntülerin frekansıdır.

In [5]:

reader = imageio.get_reader("cat.mp4") 
fps = reader.get_meta_data()["fps"] # Saniye de geçen kare sayısı alıyoruz video yazma işleminde bizim için önemli bir parametre
writer_mask = imageio.get_writer('mask.mp4', fps=fps) # output dosyasının adını ve fps değerini veriyoruz .
writer = imageio.get_writer('result.mp4', fps=fps)
for i, frame in enumerate(reader): # i sayaç frame ise videonun kareleri
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
sensitivity = 20
lower_white = np.array([0,0,200-sensitivity])
upper_white = np.array([255,sensitivity,255])
mask = cv.inRange(hsv, lower_white, upper_white)
writer_mask.append_data(mask) # Maskeden geçiştiğimiz frameleri output dosyasına yazıyoruz.
res = cv.bitwise_and(frame, frame, mask=mask)
writer.append_data(res) # And işlemi yaptığımız frameleri output dosyasına yazıyoruz.
# print(i) # Kaç tane frame olduğunuz görmek istiyorsanız commenti kaldırabilirsiniz.
# Dosyalarımız kapatıyoruz.
writer_mask.close()
writer.close()

Kullanılan Kaynaklar

https://tr.wikipedia.org/wiki/Saniyedeki_kare_say%C4%B1s%C4%B1

https://docs.opencv.org/master/d6/d00/tutorial_py_root.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