#4 Raspberry Pi | Tutorial Pemrograman Dasar OpenCV — Part 1

Muhammad Yunus
5 min readMay 22, 2020

--

read and show image | crop, resize and rotate image | convert image RGB to grayscale

Hai, semuanya. Setelah sebelumnya kita berhasil install OpenCV 3.4 pada Raspberry Pi 3 dan Python 3.7 menggunakan pip3 yang bisa dilihat disini,

Sekarang kita akan lanjutkan dengan pembasan dasar-dasar pemrograman OpenCV. OpenCV seperti kita ketahui merupakan library open-source untuk pemrosesan citra digital yang awalnya dikembangkan oleh Intel.

Berikut adalah outline yang akan dibahas pada tutorial kali ini :

  • Understanding Image as a Matrix 3D
  • Read & Show Image
  • Crop Image
  • Resize Image
  • Rotate Image
  • Convert Image to Grayscale

Prerequisite

  • Menggunakan Raspberry Pi 3,
  • OS Raspbian (non Lite),
  • Terinstall OpenCV > 3.0.0,
  • Menggunakan moba-xterm untuk remote SSH Raspberry Pi, download disini,
  • Clone Tutorial Resource di github saya, disini,

Cara clone, pada terminal Raspberry Pi 3, jalankan,

$ sudo apt-get install git
$ git clone https://github.com/Muhammad-Yunus/Basic-OpenCV-Programming.git
  • Terinstall Jupyter Notebook pada Raspbery Pi, dapat diikuti disini,

Tutorial

Understanding Image as a Matrix 3D

Sebelum kita memulai pemrogramman OpenCV menggunakan Python, kita terlebih dahulu harus tau bagaimana mesin memahasi image/gambar. Image oleh mesin dimengerti sebagai matrix 3D yang memiliki lebar dan tinggi dan kedalaman berupa saluran warna RGB (Red, Green, Blue),

image as matrix 3D
  • Tiap titik data pada image disebut dengan Pixel, memiliki koordinat posisi (x,y) terhadap lebar dan tinggi image.
  • 1 Pixel memiliki 3 nilai (RGB) berupa 8 bit data dengan rentang 0–255, mendekati 0, warna semakin gelap, mendekati 255 warna semakin terang.
  • Titik 0,0 pixel berada pada ujung kiri atas image.
  • Size image diusahakan memiliki ukuran standar agar memudahkan dalam proses analisa kedepanya, berikut adalah ukuran gambar yang standar.

Read & Show Image

Sekarang kita akan coba baca gambar dan menampilkan gambar menggunakan OpenCV. Gambar yang akan ditampilkan terdapat pada folder Basic-OpenCV-Programming , masuk kedalam folder tersebut dan buat file notebook baru,

Selanjutnya masukan blok program berikut, pada notebook yang baru dibuat,

klik “space-bar” untuk close image preview,

Fungsi cv2.imread() digunakan untuk membaca gambar pada path yang kita tulis didalamnya. Untuk menampilkan gambar gunakan cv2.imshow() , perlu diingat, agar gambar yang ditampilkan terus standby, gunakan cv2.waitkey() dan cv2.destroyAllWindows() untuk close window saat signal close diterima.

Kita dapat custom agar window diclose misalnya menggunakan tomol ‘q’, dengan memodifikasi bagian cv2.waitkey() menjadi seperti berikut,

Crop Image

Untuk melakukan crop image, bisa dilakukan menggunakan numpy slicing, dengan format image_array[y_min:y_max , x_min:x_max] , bentuk ini akan mengambil image pada lokasi sebagai berikut,

Berikut adalah implementasinya,

Result pada jupyter notebook,

Resize Image

Sekarang kita akan coba resize image dengan berbagai ukuran menggunakan fungsi cv2.resize() dengan (new_width, new_height) yang diberikan, berikut adalah implementasinya,

Result pada Jupyter Notebook,

Kita dapat modifikasi program diatas, agar dapat melakukan resize dengan persentase, terlebih dahulu kita buat fungsi untuk mengubah persentase menjadi size citra yang baru. Pada fungsi tersebut check size original image menggunakan image.shape , setelah itu kalikan terhadap persentase yang diberikan. Berikut implementasinya,

Result pada Jupyter Notebook,

Rotate Image

Rotate image pada OpenCV menerapkan konsep rotasi matrix, dimana posisi pixel (x,y) akan dirotate dengan matrix rotation M, ke posisi yang baru (xt, yt)

Untuk M didefinisikan sebagai,

Selain itu OpenCV memfasilitasi untuk mengadjust center rotation untuk rotasi, didefinisikan sebagai berikut,

Beikut adalah implementasinya pada python,

Dari program diatas kita akan melakukan rotasi image pada pusat koordinat, dengan sudut -45° (45° searah arah jarum jam) dan scale ratio 1.0 (ukuran sama). Fungsi cv2.getRotationMatrix2D() digunakan untuk menggenerate matrix rotasi seperti yang sudah kita bahas diatas. Sedangkan fungsi cv2.warpAffine() digunakan untuk menggenerate image baru yang leah dirotasi menggunakan matrix rotasi yang didapatkan sebelumnya.

Penggunaan // bermanfaat untuk pembagian dengan hasil nilai bulat, tanpa harus menggunakan casting tipe data seperti yang kita lakukan pada tutorial resize image by percentage sebelumnya.

Result pada Jupyter Notebook,

Convert to Grayscale

Untuk mengkonversi image 3D RGB ke 2D Grayscale, maka tiap nilai pixel citra akan dipetakan menjadi nilai baru dengan salah satunya menggunakan formula berikut,

Input image 3D : (height, width, channel)

Output Image 2D : (height, width)

Berikut adalah implementasinya,

Fungsi cv2.cvtColor() digunakan untuk meng-convert image matrix ke grayscale dengan parameter cv2.COLOR_BGR2GRAY .

Result pada Jupyter Notebook,

Nah, sekian untuk tutorial kali ini, selanjutnya akan diabahas cara menghandle video pada OpenCV (read, show, capture photo & video via camera)

--

--

Muhammad Yunus
Muhammad Yunus

Written by Muhammad Yunus

IoT Engineer, Software Developer & Machine Learning Enthusiast

No responses yet