OpenCV Ubuntu C++ - Operasi morphology: erode dan dilate

Erode dan Dilate merupakan dua jenis fungsi yang sangat berguna dalam computer vision. Erode dan Dilate merupakan bagian dari operasi morphology. Salah satu kegunaan dari erode dan dilate adalah menghilangkan noise (titik-titik tidak perlu) di sebuah frame gambar / video ketika sedang melakukan proses penyeleksian warna. Biar lebih menarik, saya akan tampilkan perbedaan hasilnya terlebih dahulu:
Tanpa operasi morphology:

Dengan operasi Erode: 

Dengan operasi Dilate:

Sudah kelihatan kan bedanya? Dengan menggunakan operasi erode, maka titik-titik noise akan dihilangkan sesuai besarnya matrix yang digunakan pada operasi erode. Sedangkan jika menggunakan operasi dilate, maka titik-titik noise pada frame akan dibuat lebih besar sesuai besarnya matrix yang digunakan. Sekarang kita ke bagian programmingnya.
Silahkan copy-paste saja code nya:

//BISMILLAH - Dzikri Purnama - Free to Copy&Paste

//Operasi Morphology Erode dan Dilate

//#include "stdafx.h"

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>

using namespace cv;

using namespace std;

int main()

{

    int h_min = 4, h_max = 78, s_min = 50, s_max = 255, v_min = 20, v_max = 255; //oranye

    //int h_min = 95, h_max = 100, s_min = 130, s_max = 255, v_min = 150, v_max = 255; //biru

    //int h_min = 4, h_max = 24, s_min = 38, s_max = 255, v_min = 150, v_max = 255; //kuning

    VideoCapture cap(0);

    if(!cap.isOpened())

        return -1;

    cap.set(CV_CAP_PROP_FRAME_WIDTH,320);

    cap.set(CV_CAP_PROP_FRAME_HEIGHT,240);

    Mat frame, hsv, threshold;

    namedWindow("camera");

    namedWindow("hsv");

    while (true)

    {

        cap>>frame;

        GaussianBlur(frame, frame, Size(11,11),2,2);

        imshow("camera",frame);

        cvtColor(frame,hsv,CV_BGR2HSV);

        inRange(hsv,Scalar(h_min,s_min,v_min),Scalar(h_max,s_max,v_max),threshold);
       
        //---------------------- operasi erode dan dilate -------------------------//
       
        erode(threshold, threshold, getStructuringElement(MORPH_ELLIPSE, Size(11, 11)) ); // perkecil noise

        dilate( threshold, threshold, getStructuringElement(MORPH_ELLIPSE, Size(11, 11)) ); //perbesar noise

        //-----------------------(pilih salah satu saja)------------------------//
       
        imshow("treshold",threshold);

        if(waitKey(20) != -1)

            break;

    }

    return 0;

}
Pada code di atas, terdapat baris operasi erode dan dilate, pilih salah satu saja, yang tidak digunakan, silahkan dijadikan comment (//). Masih bingung dengan size matrix yang saya sebut di awal? Size(11,11) itulah yang saya maksud, besar ukuran operasi yang saya gunakan adalah 11. Semakin besar nilainya semakin besar juga pixel yg akan dipengaruhi. Begitupun sebaliknya. Kalau tidak percaya, silahkan di coba dan di variasikan nilainya. Oke sekian dulu.

Related Posts:

0 Response to "OpenCV Ubuntu C++ - Operasi morphology: erode dan dilate"