Tags
#opencv #android
Organization
Teknologi Informasi - UNUD
Date
January 1, 2018

OpenCV Android

Aplikasi Computer Vision Android menggunakan OpenCV

Intro

Aplikasi android ini berisi kumpulan latihan-latihan menggunakan open cv, dari membuka kamera, memberi filter pada kamera, menampilkan pixel dari gambar, dan mendeteksi garis dan lingkaran.

Kamera OpenCV

Latihan membuka kamera dan filterisasi pada opencv terdapat pada activity MainActivity, GrayscaleFilter, CannyFilter, dan GaussianFilter.

Menampilkan Pixel Gambar

Menampilkan pixel gambar bisa dicoba dengan mengklik tombol GET PIXEL pada halaman utama. Resolusi gambar yang digunakan jangan terlalu besar karena aplikasi akan crash. Pakai saja gambar 10 x 10 (bisa dibuat di paint). Activity untuk modul get pixel ada pada TesGetPixel. Cara kerjanya, pilih gambar > klik tombol pixel

  • GET PIXEL, untuk menampilkan pixel asli.
  • FLIP VERTICAL, flip gambar thd sumbu x.
  • FLIP HORIZONTAL, flip gambar thd sumbu y.
  • BRIGHTNESS +20, menambah value pixel +20.

Deteksi Garis dan Lingkaran

Untuk mendeteksi garis dan lingkaran, digunakan fungsi Hough Transform yang sudah ada di OpenCV. Tombol HOUGH CAMERA akan membuka kamera dan mendeksi garis dan lingkaran secara live. Sedangkan HOUGH INPUT mendeteksi dari gambar yang di import.

Ini contoh kode untuk deteksi garis dan lingkaran

Mat circles = new Mat();
Imgproc.blur(input, input, new Size(7, 7), new Point(2,2));
Imgproc.HoughCircles(input, circles, Imgproc.CV_HOUGH_GRADIENT, 2, 100, 100, 90, 0, 1000);

Mat lines = new Mat();
Imgproc.Canny(input, input, 50, 50);
Bitmap bmp = Bitmap.createBitmap(input.cols(), input.rows(), Bitmap.Config.ARGB_8888);
Imgproc.HoughLinesP(input, lines, 1, Math.PI/180, 50, 20, 20);

for(int x = 0; x <lines.cols(); x++){
    double[] vec = lines.get(0, x);
    double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3];
    Point start = new Point(x1, y1);
    Point end = new Point(x2, y2);
    Core.line(mRGB, start, end, new Scalar(0,0,255,255), 3);
}

if(circles.cols()>0){
    for(int x=0; x<Math.min(circles.cols(), 5); x++){
        double circleVect[] = circles.get(0, x);
        if(circleVect == null){
            break;
        }
        Point center = new Point((int)circleVect[0], (int) circleVect[1]);
        int radius = (int) circleVect[2];

        circle(mRGB, center, radius, new Scalar(255,0,0,255),3, 8,0);
    }
}

Screenshot

Created By Putu Jhonarendra. Pageviews: 0