OpenCV Matris Üzerinde Çizim İşlemleri

OpenCV Matris Üzerinde Çizim İşlemleri

Mat nesnesi üzerinde çizim yapmak yani dikdörtgen, daire, kare, çizgi çizmek veya metin yazdırmak gibi işlemler için imgproc sınıfı kullanılmaktadır. Bu sınıf içerisinde yer alan metotlardın farklı parametrelere sahip aşırı yüklenmiş (override) alternatifleri bulunmaktadır.

Dikdörtgen çizmek için imgproc içerisindeki rectangle metodunu kullanacağız. Aşağıdaki örnekte dosyadan bir resim dosyası okunuyor ve bu resim dosyası üzerine belirlenen konuma belirlenen renk ile bir kare çiziliyor. İşlemin ardından düzenlenen görüntü tekrardan dosya dizinine yazılıyor.

public class Dikdortgen {

	public static void main(String[] args) {

	System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	Mat goruntuDizisi=new Mat();
	goruntuDizisi=Imgcodecs.imread("C:\\kiz_kulesi.jpg");	
	/* rectangle metodu paramatetre olarak, üzerinde çizim yapılacak bir mat nesnesi
	 * dikdörtgen çizimi için gerekli olan 4 köşenin koordinatı [(x1,y1),(x2,y2)] ve rengini almaktadır.
	 * */
	Imgproc.rectangle(goruntuDizisi, new Point(10,100), new Point(100,200),new Scalar(76,255,0));
	Imgcodecs.imwrite("C:\\Yeni_kiz_kulesi.jpg", goruntuDizisi);
	System.out.println("Düzenlenen görüntü dosya sistemine yazıldı.");
	}
}

15

Point tipinde dikdörtgenin köşe koordinatlarını (x,y), scalar ile de dikdörtgenin rengini veriyoruz. Buradaki önemli nokta renkleri belirtmek için kullandığımız scalar sınıfı. Bu sınıf core paketi içerisinde bulunmaktadır ve RGB renkleri belirtmek için kullanılabilir. Scalar üç parametre almaktadır ve bu parametreler tahmin edebileceğiniz üzer RGB  (Kırmızı Yeşil Mavi) değerleridir. Fakat RGB değerlerini BGR (Mavi Yeşil Kırmızı)olarak tersten vermemiz gerekmektedir.

Not:Point, koordinatları kolay bir şekilde tanımlamak için geliştirilmiş içerisinde x ve y noktalarını barındıran sınıftır. Bir çok programlama dili için ortaktır veya benzerleri mevcuttur. https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html

Çizgi çizmek için ise line() metodu bulunmaktadır. Üzerinde işlem yapılmak için bir mat nesnesi ve point tipinde x, y koordinatları ve rengini parametre olarak almaktadır.

Imgproc.line(mat, point, point, color);

 

Daire çizmek için circle() metodu bulunmaktadır. Parametre olarak işlem yapılacak mat tipinde görüntü,  point tipinde merkez koordinat, int tipinde yarıçap ve renk almaktadır.

 

Imgproc.circle(mat, point, int, color);

 

Çokgen (Poligon) çizmek için polylines() metodu bulunmaktadır. Parametre olarak işlem yapılacak mat tipinde görüntü nesnesi, MatOfPoint tipinde liste olarak köşe koordinatları, bool tipinde açıklık kapalılık durumu ve renk almaktadır. Buradaki isClosed kapalı olarak atanırsa her eğrinin son köşesine bir çizgi çizer.

 

Imgproc.polylines(mat, point, isClosed, color);

 

Yazı yazmak için ise putText() metodu bulunmaktadır.  Parametre olarak işlem yapılacak mat nesnesi, yazılacak olan string metin, point olarak koordinat, metinsel ifadenin fontu, double tipinde fontun ölçeği ve renk almaktadır.

 

Imgproc.putText(mat, text, point, fontFace, fontScale, color);

 

Ok çizmek için ise yine çizgi çizmek için kullanılana benzer arrowedLine() metodu bulunmaktadır. Bu metot bir mat nesnesi,  point tipinde 2 adet koordinat ve renk almaktadır.

 

Imgproc.arrowedLine(mat, point1, point2, color);