Çizim Fonksiyonları

Created with Sketch.
  • Numpy kütüphanesi ile beyaz/siyah ekran oluşturmayı öğreneceksiniz: np.ones(), np.zeros()
  • Ekrana yazı yazdırmayı öğreneceksiniz: cv2.putText()
  • OpenCV fonksiyonları kullanarak farklı geometrileri nasıl oluşturacağımızı göreceksiniz: cv2.line()cv2.circle() , cv2.rectangle()cv2.ellipse()cv2.putText() 

1. Beyaz Ekran Oluşturma

Numpy kütüphanesinin ne olduğuna geçmeden önce, dijital bir ortamda nasıl beyaz bir alan oluşturabileceğimizi düşünelim. Örneğin, elimizde siyah bir kağıt var ve belli bir alanını beyaz yapmak istiyoruz. Bu durumda ne yaparız ? O alanı beyaza boyarız değil mi ?

Peki dijital ortamda bir ne yapacağız ?

Piksellerin gücünü kullanacağız.

Yani seçtiğimiz bir alanı beyaz piksellerle dolduracağız. Bu sayede tabir-i caizse, o bölgeyi beyaza boyamış oluyoruz. Bu boyama işlemini de NumPy kütüphanesi yardımıyla yapıyoruz. Bu konuyu basitçe bu şekilde açıkladıktan sonra biraz da NumPy’dan bahsedelim.

1.1 NumPy Nedir ?

NumPy kütüphanesi matematiksel işlemleri hızlı ve pratik şekilde yapmamızı sağlayan bir Python kütüphanesidir. Açılımı Numerical Python‘dur, yani Sayısal Python. Bu kütüphane bilimsel hesaplamalarda ve özellikle yapay zekada sıkça kullanılır. Biz ise şimdilik sadece beyaz ekran oluşturmada kullanacağız.

Dipçe: Numpy fonksiyonlarını kullanmadan önce NumPy kütüphanesini import etmeyi unutmayın.

1.2 Numpy ile Ekran Oluşturma

NumPy ile siyah yada beyaz ekran oluşturmak oldukça kolay. Biz bu yazıda, beyaz ekran üzerinden ilerleyeceğiz ama isterseniz siz siyah ekran da oluşturabilirsiniz. Ben size ikisini de göstereceğim ama beyaz ekran üzerinden çalışmamıza devam edeceğim.

Beyaz ekran oluşturmak demek, belirli bir alana beyaz pikselleri dizmek demektir. Bunun için tüm piksellerin BGR değerleri (255,255,255) olmalıdır. Biz np.zeros() fonksiyonunu ile belli bir alanı siyaha boyayacağız yani BGR değerlerini (0,0,0) yapacağız. Bu değerlerin her birine 255 eklersek, BGR değerleri (255,255,255) olacak ve beyaz bir ekran elde etmiş olacağız.

np.zeros() fonksiyonunun ilk argümanı, boyamak istediğimiz alan olacak. İkinci argüman ise, veri tipidir. Örneğin, 512 x 512 büyüklüğünde beyaz bir ekran oluşturalım. Bunun için aşağıdaki kodları yazalım:

import cv2
import numpy as np

img = np.zeros((512,512,3), dtype = np.uint8) + 255

cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = np.zeros((512,512,3), dtype = np.uint8) + 255
img = np.zeros((512,512,3), dtype = np.uint8) + 100
img = np.zeros((512,512,3), dtype = np.uint8)

Fonksiyon içerisindeki (512,512) değeri, alanı işaret ediyor. 3 sayısı ise kanal verisi yani BGR kodları.

Dipçe: Kodlarımızı çalıştırmadan önce print(img) yazarak oluşan diziye bakabilirsiniz. Karşınıza 255’lerden oluşan bir dizi çıkacaktır.

Aslında beyaz ve siyah arasındaki farklı tonlardan meydana gelen ekranlar da oluşturabiliriz. + 255 yerine farklı bir sayı yazarsanız, o sayıya bağlı renk tonuna ulaşırsınız.

Örneğin img = np.zeros((512,512,3), dtype = np.uint8) + 100 ile grimsi bir ekran karşınıza çıkar.

2. OpenCV ile Çizim Yapma

OpenCV’nin çizim fonksiyonları ile aslında göze oldukça hoş gelen rengarenk çizimler yapmak mümkün fakat bunun için NumPy kütüphanesini daha etkili kullanmayı öğrenmeniz gerekiyor. Bu konudan başka yazılarda da bahsederiz. Fakat şimdilik işin temelini öğrenelim ve OpenCV’de usta olmaya giden yolda bir çizgi çizerek ilk adımımızı atalım.

2.1 Çizgi Çizmek

Bunun için cv2.line() fonksiyonunu kullanırız. İçerisine aldığı argümanları tek tek açıklayalım. Kodlar üzerinde tek tek açıklayalım.

import cv2
import numpy as np

img = np.zeros((512,512,3), dtype = np.uint8) + 255
cv2.line(img,(0,0),(512,512),(255,0,0),5)

cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Gördüğünüz gibi cv2.line toplamda 5 argüman aldı.(Parantez içi tek sayılır.):

  • img: Çizim yapılacak ekran
  • (0,0) : Çizginin başlayacağı köşe. (0,0) pikselinin ekranın sol üst köşesi olduğunu unutmayın.
  • (512.512) : Çizginin biteceği köşe.
  • (255,0,0) : BGR renk kodlarıdır. Yani çizginin rengi
  • 5 : Çizginin kalınlığı.

Gördüğünüz gibi ekrana mavi bir çizgi çizdik. Fonksiyon içindeki değişkenleri değiştirip kendiniz de farklı çizimler yapabilirsiniz.

2.2 Dikdörtgen Çizmek

Kullanımı bir önceki fonksiyon ile aynı. Tek fark piksellerin/koordinatların ifade ettği yerler. İlk kordinat dikdortgenin sol üst köşesini, ikinci koordinbat ise sağ alt köşeini temsil ediyor.

import cv2
import numpy as np

img = np.zeros((512,512,3), dtype = np.uint8) + 255
cv2.rectangle(img,(150,150),(320,320),(0,255,0),3)

cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Gördüğünüz gibi toplamda 5 argüman aldı.(Parantez içi tek sayılır.):

  • img: Çizim yapılacak ekran
  • (150,150) : Dikdörtgenin sol üst köşesi, başlangıç noktası
  • (320,320) : Dikdörtgenin sağ alt köşesi bitiş noktası.
  • (0,255,0) : BGR renk kodlarıdır. Yani dikdörtgenin çevre çizgilerinin rengi
  • 3 : Çizginin kalınlığı.

Dipçe: Eğer çizgi kalınlığını -1 olarak girersek içi dolu bir dikdörtgen elde ederiz.

cv2.rectangle(img,(150,150),(320,320),(0,255,0),3)
cv2.rectangle(img,(150,150),(320,320),(0,255,0),-1)

2.3 Çember Çizmek

Yine benzer argümanları kullanacağız ama bazı farklar olacak tabiki. Şimdi bir çember hayal edelim. Bir çemberin geometrik özellikleri nelerdir ? Merkez noktası ve yarıçapıdır değil mi?İşte bizde bu fonksiyonun içine argüman olarak merkez noktası ve yarıçap gireceğiz.

import cv2
import numpy as np

img = np.zeros((512,512,3), dtype = np.uint8) + 255
cv2.circle(img,(150,150),50,(0,0,255),2)

cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Gördüğünüz gibi toplamda 5 argüman aldı.(Parantez içi tek sayılır) :

  • img: Çizim yapılacak ekran
  • (150,150) : Çemberin merkez noktası
  • 50 : Çember yarıçapı
  • (0,0,255) : BGR renk kodlarıdır. Yani dikdörtgenin çevre çizgilerinin rengi
  • 2 : Çember çevre çizgisinin kalınlığı. Buraya eğer -1 girersek içi dolu bir çember yani daire elde ederiz.

Dipçe: Eğer çevre çizgisinin kalınlığını -1 olarak girerseniz içi dolu bir çember, diğer bir deyişle daire elde etmiş olursunuz.

cv2.circle(img,(150,150),50,(0,0,255),2)
cv2.circle(img,(150,150),50,(0,0,255),-1)

2.4 Yazı Yazdırmak

Burada kullancağımız fonksiyon cv2.putText() olacak. Bu fonksiyon ile ekrana yazı yazacağız. Bir yazının özellikleri nelerse biz de argüman olarak onarı gireceğiz. Önce kodlarımızı yazıp daha sonra argümanları tek tek açıklayalım.

import cv2
import numpy as np

img = np.zeros((512,512,3), dtype = np.uint8) + 255

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV', (10,100), font, 4, (245,158,66), 4, cv2.LINE_AA)
cv2.imshow("image",img)

cv2.waitKey(0)
cv2.destroyAllWindows()
  • img: Yazı yazılacak ekran
  • ‘OpenCV‘: Yazacağımız metin
  • (10,100) : Metinin başlayacağı sol alt köşe
  • font : Yazı tipi
  • 4 : font büyüklüğü
  • (245,158,66): yazı rengi
  • 4 : yazı kalınlığı
  • cv2.LINE_AA : yazı tipi

Dipçe: Font tipini değiştirerek yazının tipini de değiştirebilirsiniz. Aşağıdaki dizelgede kullanabileceğiz bazı font tipleri yer almaktadır:

  • cv2.FONT_HERSHEY_SIMPLEX
  • cv2.FONT_HERSHEY_TRIPLEX
  • cv2.FONT_HERSHEY_COMPLEX
  • cv2.FONT_HERSHEY_DUPLEX
  • cv2.FONT_HERSHEY_PLAIN
  • cv2.FONT_HERSHEY_SCRIPT_COMPLEX
font = cv2.FONT_HERSHEY_SIMPLEX

cv2.FONT_HERSHEY_TRIPLEX

Yorum yapılmamış

Yorumunuzu ekleyin