Image processing secara amnya sangat luas. Ada image processing untuk:

  • orang seni mencantikkan gambar (image enhancement),

  • membaik pulih gambar yang telah rosak untuk tujuan perisikan (image restoration),

  • mengesan pergerakan untuk tujuan keselamatan (camera surveillance),

  • mengecilkan saiz fail gambar (image compression), dan

  • memperoleh maklumat daripada gambar untuk tujuan analisis (image analysis), contohnya untuk mengesan muka seperti yang terdapat di kamera, membaca tulisan daripada gambar, dan mengesan cancer daripada gambar x-ray.

Walaupun tujuan-tujuan tersebut berlainan, ada beberapa teknik yang biasa digunakan dalam setiap image processing, contohnya untuk mendapatkan kesan kabur (blur), dan menghasilkan kontras (contrast) yang tinggi. Jadi, teknik-teknik tersebut dikumpulkan dalam satu library supaya programmer tidak perlu tulis semula code yang sama.

Library image processing untuk Java ada banyak, antaranya ImageJ, ImageJ2, Marvin, OpenCV, dan JavaCV (wrapper untuk OpenCV). Untuk tutorial Jom Belajar Java, kita akan gunakan OpenCV.

OpenCV

OpenCV secara asalnya ialah library image processing untuk C/C, tetapi disediakan interface untuk Python dan Java. Ini kerana image processing memerlukan performance yang tinggi kerana image processing melibatkan data yang banyak iaitu data untuk setiap pixel dalam sesebuah gambar. Jadi, proses perlu dilakukan menggunakan programming language yang paling hampir dengan machine language seperti C/C.

OpenCV vs JavaCV

Jadi, kenapa kita tidak menggunakan JavaCV walaupun JavaCV juga menggunakan OpenCV untuk membuat image processing? Jawapannya ialah documentation. JavaCV lebih mudah digunakan oleh Java programmer tetapi kurang documentation. OpenCV pula perlu diprogram seperti cara programming untuk C/C, dan documentation untuk OpenCV banyak ditulis untuk C/C. Oleh itu, kita boleh lihat rujukan daripada documentation untuk C/C++ dan cuba tulis semula menggunakan Java.

Jadi bila boleh guna JavaCV?

Kita boleh mula guna JavaCV jika kita sudah semakin mahir dengan image processing dan mahu menggunakan library tambahan kerana selain OpenCV, JavaCV juga menggunakan library lain yang biasa digunakan dalam sesebuah research seperti FFmpeg, OpenKinect, dan videoInput.

Kekurangan OpenCV menggunakan Java interface

Jika kita menggunakan C/C++ untuk OpenCV, kita boleh menggunakan class Highgui untuk memaparkan sesebuah image, tetapi class Highgui tidak disediakan untuk Java. Jadi bagaimana kita nak paparkan image daripada OpenCV?

Kalau anda dapat teka, bagus!

Ya, kita akan gunakan GUI untuk Java, iaitu JavaFX.