Advertisement

Tutorial OpenCV dengan C++ : #8 Region of Interest

0 89

Class Mat sebagaimana telah diulas pada tulisan sebelumnya dalam seri Tutorial OpenCV dengan C++ merupakan bagian yang paling dasar dalam pemrograman Computer Vision, karena Class Mat adalah representasi digital dari citra di dunia nyata.

Adakalanya, dalam sebuah tampilan citra yang besar, programmer hanya ingin memfokuskan pengamatan kepada satu bagian tertentu dari sebuah citra. Misalnya, terdapat sebuah image yang ingin diberikan perubahan atau modifikasi namun hanya untuk suatu area tertentu saja.

Area tertentu yang akan diberikan perubahan tersebut, diberi nama Region of Interest. Untuk melakukan hal tersebut, dapat digunakan  Constructor berikut

Mat (const Mat &m, const Rect &roi)

Constructor tersebut memerlukan argumen object Mat yang merupakan represntasi image, dan juga object Rect yang merepresentasikan wilayah roi yang ingin diterapkan. Rect sendiri adalah class yang merepresentasikan sebuah wilayah persegi panjang dengan  argumen berturut – turut sebagai berikut

  1. Titik koordinat x piksel di ujung kiri atas rect,
  2. Titik koordinat y piksel di ujung kiri atas rect.
  3. lebar piksel (horisontal ditarik ke kanan dari argumen nomer 1)
  4. tinggi piksel (vertikal ditarik ke bawah dari argumen nomer 2)

Adverstiment

Contohnya terdapat gambar berikut

diambil dari pixabay

Misalnya dibuat sebuah program untuk dapat menampilkan suatu region of interest , katakanlah rambu lalu lintas dilarang berhenti.

Source code dari program yang dibuat adalah sebagai berikut

#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>

using namespace cv;
using namespace std;
int main()
{
	Mat image = imread("D:/sign.jpg");
	String windowName = "OpenCV Window";
	Mat roi(image, Rect(840, 60, 200, 200));

	namedWindow(windowName);


	imshow("original", image);
	imshow("roi", roi);

	waitKey(0);

	destroyWindow(windowName);

}

Adverstiment

Program tersebut tidak akan jauh berbeda dengan program pertama Dear OpenCV pada tulisan yang lalu. Yang membedakan adalah pada baris 11, dimana object roi diinisiasi menggunakan  constructor Mat dengan region of interest sebagaimana yang telah dijelaskan. Lalu, baris 17 dimana region of interest ditampilkan menggunakan statement imshow

Jika program tersebut dijalankan, akan muncul dua jendela, salah satunya dengan nama roi, berisi image seperti gambar berikut

Memanipulasi ROI akan menghasilkan perubahan pula pada image original. Untuk membuktikan hal tersebut, embeddednesia akan menerapkan sebuah algoritma kepada ROI, misalnya adalah dilate. Pembahasan lebih rinci mengenai algoritma ini akan dibahas pada artikel lain.

Berikut adalah rincian singkat fungsi dilate yang didapat dari dokumentasinya

cv::dilate (InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())

Fungsi dilate tersebut disisipkan pada code sebelumnya

- Advertisement -

#include <iostream>
#include <opencv2/opencv.hpp>
#include <string>

using namespace cv;
using namespace std;
int main()
{
	Mat image = imread("D:/sign.jpg");
	String windowName = "OpenCV Window";
	Mat roi(image, Rect(840, 60, 200, 200));
	dilate(roi, roi, Mat(), Point(-1, -1), 5);
	namedWindow(windowName);

	imshow("original", image);
	imshow("roi", roi);

	waitKey(0);

	destroyWindow(windowName);

}

Perhatikan, penyisipan fungsi dilate ada pada baris 12, dari source code sebelumnya. Dan ketika program tersebut dijalankan, hasilnya adalah sebagai berikut dua jendela yang muncul seperti tangkapan layar berikut

Baca juga tulisan lain pada seri #Tutorial OpenCV dengan C++ atau tulisan menarik lainnya di kategori Kecerdasan Buatan

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogger menyukai ini: