Bu derste OpenCV’de python ile nasıl geometrik şekiller çizebileceğimizi öğreneceğiz. Geometrik şekiller kapsamında çizgi, daire, dikdörten, kare vb çizimler yapacağız. Bu çizimler basit bir işlem olsa da nerede kullanacağımızdan bahsetmek istiyorum. Örneğin ilerleyen uygulamalarda yüz tespit çalışmaları yapacağız. Tespit edilen yüzleri kare içine alıp, çizgi kalınlıkları, renkleri vb tanımlayabilmek için çizim işlemlerini biliyor olmak gerekmektedir.
Line çizimi : cv2.line
cv2.line temelde 4 parametre ile çalışır.
Parametre 1 : çizimin yapılacak olduğu arka plan
Parametre 2 : PT1 : x1,y1 koordinatı yani çizginin x1,y1 koordinatı başlangıç noktası
Parametre 3 : PT2 : x2,y2 koordinatı, cizginin x2,y2 koordinatı bitiş noktası
Parametre 4 : renk
Parametre 5 : çizgi kalınlığı
import cv2
import numpy as np
print(np.__version__)
#numpy kütüphanesi ile 512,512 boyutunda 3 kanallı sıfırlardan oluşan, 8 bitlik boş bir arkaplan oluşturduk
bg=np.zeros((512,512,3),dtype="uint8")
cv2.line(bg,(0,0),(128,128),(255,0,0),3)
cv2.arrowedLine(bg,(512,0),(128,128),(0,255,0),3)
cv2.imshow("geo_pencere",bg)
cv2.waitKey(0)
cv2.destroyAllWindows()
numpy kütüphanesini içe aktarıyoruz. Numpy kütüphanesini eklememizin sebebi sıfırlardan oluşan yani siyah renkli 512,512 boyutunda 3 kanallı arkaplan oluşturuyoruz. Sonrasında cv2.line ile çizim yapılır. Cv2.line için 5 parametre tanımı yapıyoruz. Cv2.arrowedLine ile ok işaretli çizgi oluşturuyoruz. Cv2.imshow, cv2.waitKey ve cv2.destroyAllWindows diğer derslerde olduğu gibi pencerede resim görüntüleme, ekranda resmi bekletme, gösterim sonrasında pencereyi sonlandırma işlemleri yapılmıştır.
Şimdi cv2.rectangle ile dikdörtgen, kare çizimi yapalım. cv2.rectangle temelde 6 parametre alır.
1. parametre | Çizimin yapılacak olduğu arka plan resmi |
2. parametre (pt1) | X1,y1 başlangıç noktası |
3.parametre (pt2) | X2,y2 bitiş noktası |
4.parametre | Renk |
5.parametre | Dikdörtgenin çizgi kalınlığı |
6.parametre | Çizgi tipi |
import cv2
import numpy as np
print(np.__version__)
bg=np.zeros((512,512,3),dtype="uint8")
cv2.line(bg,(0,0),(128,128),(255,0,0),3)
cv2.arrowedLine(bg,(512,0),(128,128),(0,255,0),3)
cv2.rectangle(bg,(256,256),(384,384),(0,0,255),2)
cv2.imshow("geo_pencere",bg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Çizdiğimiz şey aslında bir kare. 384-256 =128px
128,128 boyutunda bir kare.
Rengi kırmızı. Daha önce de bahsettiğimiz gibi OpenCV’de renk uzayı default olarak BGR’dır. 0,0,255 yani blue:0, green:0, red:255 karemizin kırmızı olacağı anlamına gelir.
Thickness yani kalınlık değerini -1 yaparsak, içini doldurma işlemi yapar.
Bir diğer çizim tipi olan daire çizimine geçelim. Daire çiziminde cv2.circle komutu kullanılır ve aldığı parametreler aşağıdaki gibidir.
1.parametre | Çizimin yapılacak olduğu arka plan resmi |
2.parametre | Merkez noktası |
3.parametre | Yarıçap – radius |
4.parametre | Renk |
5.parametre | Kalınlık |
import cv2
import numpy as np
print(np.__version__)
bg=np.zeros((512,512,3),dtype="uint8")
cv2.line(bg,(0,0),(128,128),(255,0,0),3)
cv2.arrowedLine(bg,(512,0),(128,128),(0,255,0),3)
cv2.rectangle(bg,(256,256),(384,384),(0,0,255),-1)
cv2.circle(bg,(100,400),50,(0,255,0),3)
cv2.imshow("geo_pencere",bg)
cv2.waitKey(0)
cv2.destroyAllWindows()
Son olarak metin yazdırma işlemine bakalım. cv2.putText ile metin yazdırabiliriz.
cv2.putText(bg,’TurkIOT OpenCV giriş’,(5,500),cv2.FONT_HERSHEY_SIMPLEX,4,(255,0,0),10,cv2.LINE_AA) |
cv2.putText birçok parametre alır. İlk parametre her zaman olduğu gibi yazdırma yapacağımız arka plan. Sonrasında yazdırmak istediğimiz text, metnin x,y koordinat bilgisi, Font tanımı, font size değeri, renk, çizgi kalınlığı, çizgi tipi..
OpenCV2’de kullanabileceğiniz fontlar için linkten incelemede bulunabilirsiniz.
https://docs.opencv.org/4.5.2/d6/d6e/group__imgproc__draw.html
Bu derste ileride farklı uygulamalarda kullanacak olduğumuz temel çizim işlemlerini ele almış olduk.