Tutorial Elektronika Embedded dan Pemrograman Sampai Mahir

Tipe Data Primitif Pada OpenCV

Bagian ke empat Seri Tutorial Computer Vision

0 180

Ini adalah tulisan lanjutan dari seri tutorial Pemrograman Computer Vision menggunakan OpenCV. Sebelumnya, embeddednesia telah sampai pada ulasan bagaimana membuat program pertama dengan OpenCV, dan Visual Studio 2017 Community Edition.

Pada bagian ke 4 seri tutorial ini, embeddednesia akan membahas singkat tentang Tipe data primitif pada OpenCV sebagai landasan utama, jika ingin lebih dalam menjelajahi API yang dimilikinya. Jika anda belum mengikuti tulisan embeddednesia sebelumnya, silahkan baca terlebih dulu seri tutorial pemrograman Computer Vision di link berikut

Baca Lebih Lanjut : Seri Tutorial Pemrograman Computer Vision

Semua class dan fungsi di library OpenCV ada di namespace cv. Konsekuensinya,  saat memprogram harus dilakukan salah satu diantara dua cara berikut:

  • Menambahkan deklarasi sintaks using namespace cv
  • Menambahkan prefix cv:: untuk semua class OpenCV

Tipe data dari sebuah array mendefinisikan jumlah kanal, yaitu jumlah bit yang dialokasikan untuk tiap elemen dan bagaimana nilai tiap elemen diwakili menggunakan bit tersebut. Jika array representasi dari sebuah gambar, maka elemen dari array adalah piksel dari image tersebut.

Pada OpenCV, terdapat class DataType yang mendefinisikan tipe data primitif pada OpenCV, yaitu

  1. bool
  2. unsigned char
  3. signed char
  4. unsigned short
  5. signed short
  6. int
  7. float
  8. double
  9. atau tuple dari salah satu tipe data tersebut.

Setiap tipe data primitif, dapat didefinisikan dalam OpenCV dengan format sebagai berikut

CV_<bit depth>{U|S|F}C(<number of channels>)

Dimana,  U, S, dan F, berturut – turut adalah singkatan dari  unsigned, signed, dan float.  Jadi, setiap kanal array tunggal memiliki salah satu dari tipe – tipe data berikut

  • CV_8U – 8 bit unsigned integer
  • CV_8S – 8 bit signed integer
  • CV_16U – 16 bit unsigned integer
  • CV_16S – 16 bit signed integer
  • CV_32S – 32 bit signed integer
  • CV_32F – 32 bit floating point number
  • CV_64F – 64 bit float floating point number




Misalkan, ada sebuah array dengan tipe data CV_8U. Memiliki satu kanal. Setiap elemen dari kanal adalah 8 bit unsigned interger. Sehingga setiap elemen hanya memiliki nilai pada rentang 0 hingga 255. Contoh analogi yang umum untuk array kanal tunggal adalah image hitam putih. (pixel dengan nilai 0, merepresentasikan hitam, sedang 255 merepresentasikan putih, pixel di rentang 0 hingga 255 adalah warna diantara hitam dan putih)

4244OS_01_04

Kita bisa mendefinisikan semua tipe data diatas untuk array multi kanal. OpenCV mendukung hingga 512 kanal. Berikut adalah beberapa jenis tipe data yang biasa digunakan

  • CV_8UC1: array kanal tunggal dengan 8 bit unsigned integer, sama dengan CV_8U
  • CV_8UC2 – array 2 kanal dengan  tiap elemennya memiliki tipe data unsigned integer 8 bit.
  • CV_8UC3 – array 3 kanal dengan tiap elemennya memiliki tipe data unsigned integer 8 bit.
  • CV_8UC4 – array 4 kanal dengan  tiap elemennya memiliki tipe data unsigned integer 8 bit.
  • CV_8UC(n) – array n kanal  dengan tiap elemennya memiliki tipe data unsigned integers 8 bit. (dimana n bernilai 1 hingga 512) )

 

Misalkan, diilustrasikan sebuah array dengan tipe data CV_8UC3, yang berarti memiliki 3 kanal, dimana setiap kanal adalah 8 bit unsigned interger. Sehingga setiap elemen memiliki nilai rentang antara 0 hingga 255. Karena array 3 kanal, maka array berisi tuple dengan 3 elemen. Tuple pertama {54, 0, 34}, tuple kedua {58, 78, 185} dan seterusnya.

multi channel arrays

Contoh untuk 3 kanal array adalah image RGB yang terdiri dari kanal Merah (Red), Hijau (Green) dan  Biru (Blue).

4244OS_01_05 (1)

Contoh berikutnya adalah sebuah array dengan tipe data CV_8SC2, berarti memiliki 2 kanal, dimana elemen di setiap kanalnya  bertipe 8 bit signed integer. Sehingga setiap elemen memiliki rentang antara -128 hingga 127. Karena tipe data ini memiliki array 2 kanal, maka array terdiri dari tuple yang memiliki 2 elemen. Pada contoh, tuple pertama adalah {-85, 127}, tuple kedua adalah {25, 23} dan seterusnya

multi channel arrays_2





Matriks OpenCV

OpenCV memiliki class Mat yang digunakan untuk array tunggal atau multikanal. Yang menyimpan matriks dan vektor yang bernilai real dan kompleks, image berwarna, ataupun grayscale, histogram, dan seterusnya. Ada banyak cara untuk membuat object Mat, salah satu yang paling populer adalah sebagai berikut

Mat(nrows, ncols, type[, fillValue])

Berikut adalah contoh dari  variasi objek Mat yang dibentuk.

Contoh :

  • Mat img1(3, 5, CV_32F ); //membentuk array kanal tunggal berdimensi 3 x 5 dengan tiap elemen bertipe 32 bit float
  • Mat img2(23, 53, CV_64FC(5) ); //Membentuk array 5 kanal dengan tiap elemen bertipe float 64 bit
  • Mat img3(Size(100, 200), CV_16UC2 ); //Membentuk array 2 kanal berdimensi 100 x 200 bertipe data  unsigned integers 16 bit

 

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

%d blogger menyukai ini: