Tutorial OpenCV dengan C++ : #8 Region of Interest
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
- Titik koordinat x piksel di ujung kiri atas
rect
, - Titik koordinat y piksel di ujung kiri atas
rect
. - lebar piksel (horisontal ditarik ke kanan dari argumen nomer 1)
- tinggi piksel (vertikal ditarik ke bawah dari argumen nomer 2)
Contohnya terdapat gambar berikut
Misalnya dibuat sebuah program untuk dapat menampilkan suatu region of interest , katakanlah rambu lalu lintas dilarang berhenti.
Baca juga :
Source code dari program yang dibuat adalah sebagai berikut
[cpp collapse=”false” firstline=”1″ gutter=”true” highlight=”11,17″ htmlscript=”false”] #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);
}
[/cpp]
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
#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);
}
[/cpp]
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
Anda harus log masuk untuk menerbitkan komentar.