Çizgi, çember, dikdörtgen gibi basit şekilleri çizdirmek için OpenCV’nin bize sunmuş olduğu bazı fonksiyonlar var. Bu fonksiyonları kullanarak basit bir deneme yapacağız. Öncelikle bu fonksiyonların bazılarını tanıyalım
\bold{line}(Resim,~A~Noktası,~B~Noktası,~Renk,~Kalınlık) \\
\bold{circle}(Resim,~Merkez~Noktası,~Radius,~Renk,~Kalınlık) \\ ~~ \\
\bold{rectangle}(Resim,~Rect,~Renk,~Kalınlık) \\
\bold{Rect}(x,~y,~width,~height) \\
x,y \Rightarrow sol~üst~köşe- line: çizgi çizmek için kullanıyoruz. A ve B noktalarını veriyoruz.
- circle: daire çizmek için kullanıyoruz. Merkez ve radius veriyoruz.
- rectangle: dikdörtgen çizmek için kullanıyoruz. Burada öncelikle dikdörtgenimizin sol üst köşesinin koordinatı veriyoruz. Daha sonra en,boy değerlerini belirtiyoruz.
Şimdi koordinat sistemi demişken OpenCV’de tam olarak nasıl çalıştığına bakalım. Normalde X-ekseni sağa Y-ekseni yukarıya doğru artan değerlere sahiptir. OpenCV de ise Y-ekseni tam tersi olup aşağıya doğru artan değerlere sahiptir. Aşağıdaki resimde farklı piksellerin koordinatlarını belirtiyor:

#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// A --- B
// E
// D --- C
cv::Point A(50,50), B(450,50), C(450,450), D(50,450), E(250,250);
cv::Scalar roseGold(147,161,222);
cv::Scalar oliveGreen(47, 107, 99);
cv::Scalar ecru(149,205,224);
cv::Scalar gunmetalGray(67,62,53);
cv::Mat img(500,500, CV_8UC3, oliveGreen);
cv::line(img, A, C, roseGold, 3);
cv::line(img, B, D, roseGold, 3);
cv::circle(img, E, 45, ecru, 2);
cv::circle(img, E, 55, ecru, 2);
cv::Rect rectA( 50-25, 50-25, 50, 50);
cv::Rect rectB(450-25, 50-25, 50, 50);
cv::Rect rectC(450-25, 450-25, 50, 50);
cv::Rect rectD( 50-25, 450-25, 50, 50);
cv::Rect rectE( 50, 50, 400, 400);
cv::rectangle(img, rectA, gunmetalGray, 4);
cv::rectangle(img, rectB, gunmetalGray, 4);
cv::rectangle(img, rectC, gunmetalGray, 4);
cv::rectangle(img, rectD, gunmetalGray, 4);
cv::rectangle(img, rectE, roseGold, 3);
cv::putText(img, "Basic Shapes", cv::Point(200, 25), cv::FONT_HERSHEY_PLAIN, 1, ecru, 1);
cv::namedWindow("Test", cv::WINDOW_NORMAL);
cv::imshow("Test", img);
cv::waitKey(0);
return 0;
}C++Kodumuzun çıktısı aşağıda görünmektedir:

Vermiş olduğumuz bu fonksiyonların farklı parametre alan overload’ları da bulunmakta. Ayrıca elips gibi farklı nesneleri çizmemizi sağlayan başka fonksiyonlar da var. Bunlara bu yazıda değinmedik.

Leave a Reply