Advertisement

Tutorial OpenCV dengan C++ – 7 : Berkenalan dengan Class Mat

0 1.029

Dulu semasa SMA, penulis sering bertanya – tanya saat terdapat bab Matriks dalam pelajaran Matematika. Apa penerapan matriks sebagai sebuah solusi untuk memecahkan persoalan yang ada. Pelajar di bangku sekolah seringkali tak tahu menahu tentang pelajaran yang dia terima dari gurunya.

Computer Vision adalah salah satu jawaban dimana bidang yang memerlukan penerapan matriks. Dalam tulisan sebelumnya, telah dibahas bahwa citra digital dimodelkan sebagai susunan piksel di dalam baris dan kolom. Dan jika tiap piksel tersebut memiliki nilai numerik, misalkan dalam rentang 0-256, maka dengan kata lain sebuah citra digital dapat disimbolkan sebagai sebuah matriks piksel dengan nilai dari 0-256.

Di dalam openCV, matriks tersebut direpresentasikan di dalam Class Mat yang merupakan dasar dari pemrograman menggunakan openCV. Object Mat terdiri dari dua bagian, sebuah header dan matriks yang berisi nilai – nilai piksel. Header berisi informasi, seperti ukuran dari matriks, alamat memori dimana data disimpan (pointer) dan informasi yang lain yang terkait Mat dan OpenCV.

Pada tulisan sebelumnya yang berjudul Dear OpenCV, penulis telah menulis program sederhana untuk membaca data dari file gambar di hard disk lalu menjadikannya object Mat (perhatikan pada baris 17). Lalu menampilkannya kembali dalam sebuah jendela (pada baris 30)





  • Cara Lain mendapatkan Object Mat

Selain menggunakan method imread, object Mat juga bisa didapatkan dengan mendeklarasikan sekaligus menginisialisasinya. Setidaknya ada 20 Constructor yang bisa digunakan untuk membuat instance dari Mat.

Mat M(20, 15, CV_8UC3, Scalar(0,0,255));
Kedua argumen yang pertama adalah data matriks, yaitu baris dan kolom. Sehingga contoh tersebut akan menghasilkan Object Mat dengan data matriks yang terdiri dari 20 baris, 15 kolom. Contoh tersebut bisa juga dituliskan sebagai berikut
Mat M(Size(15, 20), CV_8UC3, Scalar(0,0,255)); 

Dimana dalam contoh tersebut, digunakan object Size yang memungkinkan programmer dapat menentukan ukuran dari image dan matriks. Perhatikan, bahwa di dalam contoh ini,  kolom dan baris berada pada urutan yang terbalik dengan contoh sebelumnya

  • Color Space atau Color Depth

Argumen berikutnya yang digunakan untuk mendeklrasikan object Mat adalah tipe data. yang akan menentukan jumlah ruang yang dibutuhkan untuk menyimpan object Mat di dalam memori. Pembaca disarankan membaca tulisan sebelumnya yang berjudul Tipe Data Primitif dalam OpenCV untuk lebih lengkapnya

Color Space (terkadang sering disebut color model) adalah metode yang digunakan untuk menginterpretasikan, menyimpan, dan mereproduksi satu set warna. Misalkan warna color space untuk grayscale yang setiap pikselnya direpresentasikan dengan nilai tunggal yang memiliki tipe data 8 bit unsigned integer  yang bersesuaian dengan brightness atau gray – intensity dari piksel. Nilai 0 untuk hitam mutlak, dan nilai 255 untuk putih mutlak.

Color space yang biasa digunakan lainnya adalah RGB dimana setiap piksel direpresentasikan oleh 3 nilai bertipe data 8 bit intege, yang bersesuaian dengan intensitas piksel merah, hijau dan biru. Selain itu ada HSV yang merupakan color space yang biasa digunakan di dalam computer vision untuk algoritma deteksi di dalam computer vision yang berbasis dari warna suatu objek.

Di dalam OpenCV, Color space dideklarasikan dengan pola sebagai berikut

CV_<depth><type>C<channel>




  • Kanal Warna

Jika pembaca telah membaca tulisan terdahulu tentang tipe data primitif. pembaca akan memahami bahwa  C yang dideklarasikan di tipe data primitif adalah singkatan dari Channel (kanal). Misalkan terdapat gambar sebagai berikut,

 

OpenCV menyediakan fungsi split() yang dapat memisahkan tiga kanal, seperti didemonstrasikan dalam code berikut





[cpp] // Read the image file
Mat image = imread("D:/traffic-3.jpeg", IMREAD_COLOR);

if (image.empty()) // Check for failure
{
cout << "Could not open or find the image" << endl;
system("pause"); //wait for any key press
return -1;
}
imshow("Image",image);

vector<Mat> channels;
split(image, channels);

imshow("Blue", channels[0]);
imshow("Green", channels[1]);
imshow("Red", channels[2]);
waitKey(0);
destroyAllWindows();
return 0;
[/cpp]

Jika benar, saat program di run, aplikasi akan menampilkan beberapa window seperti gambar berikut yang menunjukkan tiga kanal dipisah

 

 

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

%d blogger menyukai ini: