Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar...

14
Pengantar Pemrograman OpenCV C++ di Linux Bismillahirrahmanirrahim. Tulisan ini ditujukan kepada pemula OpenCV di Linux. Tulisan ini dibuat untuk siapa saja yang ingin tahu bagaimana menggunakan IDE untuk memrogram OpenCV dengan C++ di Linux. Tulisan ini juga dibuat untuk pengguna Microsoft Visual C++ di Windows yang ingin mencoba OpenCV di Linux. Tulisan ini mencakup pengenalan singkat, instalasi di Linux, dan contoh-contoh kode OpenCV. Tulisan ini juga berisi tip-tip memulai OpenCV semisal membaca dokumentasi resmi dan mencari sumber daya. Tulisan ini tidak berisi algoritma atau bahasan-bahasan OpenCV lanjutan yang lain. Tulisan ini hanya pengantar singkat untuk pemula. Tujuan dari tulisan ini adalah Anda mampu mengatur sendiri IDE di Linux untuk OpenCV dan bisa menjalankan kode sumber program dengan benar. Semoga tulisan ini bermanfaat. Isi Tulisan Ini 1. Apa Itu OpenCV? 2. Apa yang Bisa Dilakukan dengan OpenCV? 3. Instalasi OpenCV di Linux 4. Pilihan Editor/IDE untuk Memrogram OpenCV di Linux 5. Cara Mengonfigurasi Build Options Kompiler g++ untuk OpenCV di Geany 6. Contoh-Contoh Kode Sumber Program OpenCV 7. Sumber Referensi Belajar OpenCV 8. Tip-Tip Belajar OpenCV 9. Penutup 1. Apa Itu OpenCV? OpenCV (Open Computer Vision) Pustaka computer vision yang open source dan dipakai secara luas di macam-macam sistem operasi dan arsitektur komputer untuk keperluan pengolahan citra. 2. Apa yang Bisa Dilakukan dengan OpenCV? Tentu saja untuk memrogram suatu sistem yang berhubungan dengan citra. Contohnya sebagai berikut. 1. Mengakses webcam laptop secara langsung. 2. Melakukan object tracking via kamera. 3. Melacak kontur suatu objek 2D. 4. Membuat perangkat lunak pengolah gambar (semisal Photoshop atau GIMP).

Transcript of Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar...

Page 1: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

Pengantar Pemrograman OpenCV C++ di Linux

Bismillahirrahmanirrahim.

Tulisan ini ditujukan kepada pemula OpenCV di Linux. Tulisan ini dibuat untuk siapa saja yang ingin tahu bagaimana menggunakan IDE untuk memrogram OpenCV dengan C++ di Linux. Tulisan ini juga dibuat untuk pengguna Microsoft Visual C++ di Windows yang ingin mencoba OpenCV di Linux. Tulisan ini mencakup pengenalan singkat, instalasi di Linux, dan contoh-contoh kode OpenCV. Tulisan ini juga berisi tip-tip memulai OpenCV semisal membaca

dokumentasi resmi dan mencari sumber daya. Tulisan ini tidak berisi algoritma atau bahasan-bahasan OpenCV lanjutan yang lain. Tulisan ini hanya pengantar singkat untuk pemula. Tujuan dari tulisan ini adalah Anda mampu mengatur sendiri IDE di Linux untuk OpenCV dan bisa menjalankan kode sumber program dengan benar. Semoga tulisan ini bermanfaat.

Isi Tulisan Ini

1. Apa Itu OpenCV?2. Apa yang Bisa Dilakukan dengan OpenCV?3. Instalasi OpenCV di Linux4. Pilihan Editor/IDE untuk Memrogram OpenCV di Linux5. Cara Mengonfigurasi Build Options Kompiler g++ untuk OpenCV di Geany6. Contoh-Contoh Kode Sumber Program OpenCV7. Sumber Referensi Belajar OpenCV8. Tip-Tip Belajar OpenCV9. Penutup

1. Apa Itu OpenCV?

OpenCV (Open Computer Vision) Pustaka computer vision yang open source dan dipakai secara luas di macam-macam sistem operasi dan arsitektur komputer untuk keperluan pengolahan citra.

2. Apa yang Bisa Dilakukan dengan OpenCV?

Tentu saja untuk memrogram suatu sistem yang berhubungan dengan citra. Contohnya sebagai berikut.

1. Mengakses webcam laptop secara langsung.2. Melakukan object tracking via kamera.3. Melacak kontur suatu objek 2D.4. Membuat perangkat lunak pengolah gambar (semisal Photoshop atau GIMP).

Page 2: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

5. Memberikan efek tertentu pada gambar bitmap.6. Pattern recognition.7. Face recognition.8. Fingerprint recognition.9. Optical Character Recognition.

Supaya nyata, berikut ini saya bawakan skrinsot dari situs resmi OpenCV sendiri mengenai pengenalan kontur:

Sumber Hasil

Kedua gambar diambil dari http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html.

Page 3: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

3. Instalasi OpenCV di Linux

3.1 Ubuntu

Ikuti saja panduan resmi dari Ubuntu https://help.ubuntu.com/community/OpenCV dan OpenCV akan diinstal secara otomatis. Lakukan apa yang tertera di situ. Saya pernah melakukan instalasi OpenCV dari repo resmi dan hasilnya tidak memuaskan. Cara terbaik (untuk saat ini) adalah panduan resmi di atas.

3.2 Archlinux

pacman -S opencv opencv-samples

http://morf.lv/modules.php?name=tutorials&lasit=8

3.3 Debian

http://indranilsinharoy.com/2012/11/01/installing-opencv-on-linux/

3.4 Fedora

https://sites.google.com/a/asu.edu/wireless-video-sensor/how-to-1/how-to-install-ffmpeg-opencv-under-fedora

3.5 Mint

http://daily-ravel.blogspot.com/2012/09/installing-opencv-on-linux-mint-maya.html

3.6 Slackware

http://xathrya.web.id/blog/2013/02/07/installing-opencv-with-slackware64-14-0/

3.7 Linux Secara Umum

http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_install/linux_install.html?highlight=install%20opencv

Page 4: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

4. Pilihan Editor/IDE untuk Memrogram OpenCV di Linux

Jika Anda terbiasa dengan Microsoft Visual C++ di Windows, mulailah mengenali IDE-IDE lain yang bisa dipakai untuk memrogram dengan OpenCV. Silakan pilih sendiri dari daftar yang sudah saya tulis di http://malsasa.wordpress.com/2014/02/17/aplikasi-editor-pemrograman-di-linux/. Untuk tulisan ini, saya memilih Geany sebagai editor. Geany saya pakai karena sangat mudah dikonfigurasi dan sangat mudah dikontrol.

Page 5: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

5. Cara Mengonfigurasi Build Options Kompiler g++ untuk OpenCV di Geany

Tentu saja ini dilakukan dengan mengikuti panduan g++ build options pada pranala resmi Ubuntu di atas. Perhatikan dulu perintah berikut. Perintah ini berasal dari pranala resmi di atas.

gcc -ggdb `pkg-config --cflags opencv` -o `basename opencvtest.c .c` opencvtest.c `pkg-config --libs opencv`

Jelasnya, jika Anda menggunakan perintah di atas begitu saja dalam IDE Anda, maka Anda harus selalu mengganti nama berkas menjadi opencvtest.c. Tentu saja itu sangat merepotkan. Tak bisakah yang diganti cukup perintah di atas sehingga Anda bisa membuat nama berkas apa pun? Tentu bisa. Perhatikan pola perintah berikut dan masukkan ke dalam Geany (atau IDE yang Anda pakai). Build Options Geany berada di menu Build > Set Build Options.

Untuk Compile (ini perintah kompilasi dengan g++):

g++ -Wall -c "%f"

Untuk Build (ini perintah linking dengan g++ bersama pustaka OpenCV, ini yang terpenting):

g++ "%f" `pkg-config --cflags --libs opencv` -o "%e"

Anda benar. Nama berkas bisa digantikan dengan variabel %f dan %e. Itulah fleksibilitas build options di Geany (dan semua IDE lainnya). Silakan lihat skrinsot berikut untuk kejelasannya.

Page 6: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

6. Contoh-Contoh Kode Sumber Program OpenCV

Berikut ini saya bawakan kode sumber program OpenCV yang sudah saya tes sendiri dengan g++ dan Geany di atas Ubuntu dan bekerja dengan baik. Silakan salin tempel (copy paste) kode-kode berikut ke dalam Geany Anda dan jalankan. Pastikan Anda telah mengonfigurasi semuanya dengan benar.

6.1 Buka Sebuah Gambar Digital

// latihan_opencv_1_bukagambar.cpp// program pembaca dan penampil gambar bitmap// program ini akan membaca 1.jpg (harus ada di dalam 1 direktori yang sama dengan program), menyimpan ke dalam memori, lalu menayangkannya dalam jendela ke layar monitor// kunci program ini ada pada kelas Mat, fungsi imread(), dan fungsi imshow()// fungsi waitKey() harus diisi argumen 0 agar dia terus memunculkan jendela dan tidak langsung mati sesaat setelah dieksekusi// program ini ditulis dengan vim pada Friday, June 27, 2014 02:01 AM// Ade Malsasa Akbar <http://malsasa.wordpress.com>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream> using namespace cv;using namespace std; int main(){Mat variabel_gambar_1;variabel_gambar_1 = imread("1.jpg"); imshow("TAYANGKAN GAMBAR", variabel_gambar_1);waitKey(0);return(0);}

Page 7: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

Hasil

Page 8: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

6.2. Buka, Olah, Simpan Gambar Digital

// latihan_opencv_2_efek.cpp// program ini bersumber dari http://docs.opencv.org/doc/tutorials/introduction/load_save_image/load_save_image.html// program ini disunting dengan vim pada Sunday, June 29, 2014 11:12 AM#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp> using namespace cv; int main(){ Mat image; image = imread("1.jpg"); Mat gray_image; // fungsi cvtColor bertugas mengubah gambar asli (objek image) menjadi objek gray (objek gray_image) dengan argumen CV_BGR2GRAY cvtColor( image, gray_image, CV_BGR2GRAY ); // fungsi imwrite bertugas membuat suatu berkas gambar berdasarkan objek yang sudah diberi efek // argumen pertama adalah nama berkas, argumen kedua adalah objek Mat dari sumber yang sudah diberi efek imwrite( "gambar_gray.jpg", gray_image ); // fungsi namedWindow berguna untuk menentukan nama dan ukuran jendela namedWindow( "Gambar Asli", CV_WINDOW_AUTOSIZE ); namedWindow( "Gambar Gray", CV_WINDOW_AUTOSIZE ); // fungsi imshow berguna untuk menayangkan gambar di dalam jendela imshow( "Gambar Asli", image ); imshow( "Gambar Gray", gray_image ); // fungsi waitkey harus ada supaya program dapat terus berjalan waitKey(0); return 0;}

Page 9: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

Hasil

Page 10: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

6.3 Akses Webcam Laptop

// latihan_opencv_3_webcam.cpp// http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=video%20capture#VideoCapture// kata kunci: opencv video capture// kata kunci: opencv camera capture// diunduh pada Friday, June 27, 2014 02:33 AM#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp> // namespace untuk cv; karena sebetulnya tidak ada VideoCapture, Mat, imshow(), dan waitKey()// yang ada adalah cv::VideoCapture, cv::Mat, cv::imshow(), dan cv::waitKey()// ditulis pada Friday, June 27, 2014 07:42 PM// untuk memahaminya, bacalah http://www.cplusplus.com/doc/tutorial/namespaces/using namespace cv; int main(int, char**){// buka kamera default yakni nomor 0// ganti nomornya dengan 1 atau 2 jika kamera berada di posisi lainVideoCapture cap(0); while(true){// deklarasi objek frame dari kelas MatMat frame; // objek video dari kamera dipasangkan ke dalam framecap >> frame; // fungsi imshow() menayangkan objek Mat yang sudah berisi objek video kamera// argumen pertama adalah string untuk judul jendela// argumen kedua adalah objek Matimshow("Kamera", frame); // fungsi waitKey() (didefinisikan dalam header highgui) dibutuhkan oleh imshow() (yang juga dari highgui)// tanpa waitKey(), imshow() tidak akan melakukan window event semisal redraw, resize, input event, dan sebagainya// argumen angka di dalam waitKey menentukan berapa milisekon delay untuk key event yang dibutuhkan oleh imshow()// panggillah walau hanya untuk 1 milisekon// singkatnya, ini sepele tetapi wajib ada// sumber 1: http://stackoverflow.com/questions/12452118/what-does-waitkey-30-mean-in-opencv// sumber 2: http://docs.opencv.org/modules/highgui/doc/user_interface.html#waitkeyif(waitKey(3) >= 0) break;} return 0;}

Page 11: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

Hasil

Page 12: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

6.4 Operasi Logika (AND, OR, XOR, dan NOT) Terhadap 2 Gambar

// AND OR XOR NOT terhadap 2 gambar// sumber kode ada 2, yaitu http://opencvexamples.blogspot.com/2013/10/bitwise-and-or-xor-and-not.html// dan http://docs.opencv.org/doc/tutorials/introduction/display_image/display_image.html// karena ia harus bisa menyimpan gambar dahulu baru kemudian mengoperasikannya// baru kemudian menayangkannya// kode ini diubah dengan vim pada Friday, June 27, 2014 12:45 AM#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream> using namespace cv;using namespace std; int main( ){// kelas Mat ini berfungsi untuk menampung gambarMat variabel_gambar_1; //objek dari kelas Mat akan dipakai sebagai variabel penyimpan gambarMat variabel_gambar_2;Mat variabel_gambar_3; // proses menyimpan gambar JPG ke dalam variabel Matvariabel_gambar_1 = imread("1.jpg");variabel_gambar_2 = imread("2.jpg"); // deklarasi objek-objek (variabel-variabel) Mat untuk menyimpan hasil operasiMat simpan_hasil_and;Mat simpan_hasil_or;Mat simpan_hasil_xor;Mat simpan_hasil_not; // proses operasi AND, OR, XOR, dan NOT untuk dua gambar yang disimpan dalam dua variabel// hanya proses NOT yang melibatkan satu gambar, karena memang NOT operasi logika untuk satu operand sajabitwise_and(variabel_gambar_1, variabel_gambar_2, simpan_hasil_and); //dua gambar di-ANDimshow("AND",simpan_hasil_and); //kemudian isi variabel simpan_hasil_and ditayangkan bitwise_or(variabel_gambar_1, variabel_gambar_2, simpan_hasil_or); //dua gambar di-ORimshow("OR", simpan_hasil_or); bitwise_xor(variabel_gambar_1, variabel_gambar_2, simpan_hasil_xor); //dua gambar di-XORimshow("XOR", simpan_hasil_xor); bitwise_not(variabel_gambar_1, simpan_hasil_not); //satu gambar di-NOT

Page 13: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

imshow("NOT", simpan_hasil_not); // catatan:// bitwise_and() adalah fungsi untuk melakukan AND LOGIC OPERATION terhadap dua gambar// demikian pula untuk *_or, *_xor, dan *_not waitKey(0);return(0);}

Hasil

7. Sumber Referensi Belajar OpenCV

1. http://docs.opencv.org/index.html (dokumentasi resmi OpenCV) 2. http://opencvexamples.blogspot.com/ (kumpulan contoh kode OpenCV siap pakai)3. http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html

(panduan perkenalan OpenCV akademik)4. http://dasl.mem.drexel.edu/~noahKuntz/openCVTut1.html (tutorial OpenCV

akademik)5. http://www.cs.rit.edu/~gsp8334/ (tutorial OpenCV akademik)6. http://opencv-srf.blogspot.com/ (blog khusus OpenCV yang berisi banyak contoh +

analisis kode program yang berguna)7. http://opencv-code.com/ (blog khusus OpenCV)8. http://www.shervinemami.info/openCV.html (blog Computer Vision yang memiliki

kategori OpenCV)9. http://blog.damiles.com/category/tutorials/opencv-tutorials/ (blog lain yang

Page 14: Pengantar Pemrograman OpenCV C++ di Linux · PDF fileMembuat perangkat lunak pengolah gambar ... Ikuti saja panduan resmi dari Ubuntu https: ... 6.

memiliki kategori OpenCV)10. http://www.tutorialspoint.com/java_dip/introduction_to_opencv.htm (tutorial

OpenCV dengan Java)11. http://opencvpython.blogspot.com/ (tutorial OpenCV dengan Python)12. http://opencv-python-

tutroals.readthedocs.org/en/latest/py_tutorials/py_tutorials.html (tutorial OpenCV dengan Python)

13. http://docs.nvidia.com/tegra/Content/OpenCV_Main.html (tutorial OpenCV dari NVIDIA untuk Tegra)

14. http://opencv.wikispaces.com/ (wiki OpenCV dari komunitas)

8. Tip-Tip Belajar OpenCV

1. Cari contoh kode, kompilasikan, lihat hasilnya.2. Analisis baris-baris penting di dalam kode yang diperoleh dengan memberinya

komentar.3. Ubah kode sedikit demi sedikit, lihat hasilnya.4. Menulislah tentang OpenCV di blog Anda sendiri.

9. Penutup

Tulisan ini mulai dibuat draft-nya pada 3 April 2014 dan diselesaikan pada 29 Juni 2014. Tulisan ini lebih dulu direncanakan untuk ditulis daripada tulisan mengenai OpenGL. Tulisan ini tidak ditutup kemungkinannya untuk direvisi. Semoga tulisan ini bermanfaat.

10. Tentang Dokumen Ini

Dokumen ini adalah versi PDF dari posting asli http://malsasa.wordpress.com/2014/06/29/pengantar-pemrograman-opencv-c-di-linux/. Dokumen ini ditulis dengan fonta Ubuntu 12pt. Dokumen ini disusun ulang dengan Libreoffice Writer 3.5. Dokumen ini selesai disusun pada 7 Juli 2014. Penulis mohon maaf jika terdapat kesalahan dalam dokumen ini.

11. Tentang Penulis

Penulis adalah warga Forum Ubuntu Indonesia. Penulis mendukung pendidikan perangkatlunak legal (terutama FOSS) untuk masyarakat. Penulis menyediakan buku-buku panduanLinux untuk pemula maupun ahli untuk diunduh secara gratis1. Penulis bisa dihubungi viaSMS di nomor 0878 5273 8641.

1 http://malsasa.wordpress.com/pdf