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&PastePada 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.
//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;
}
0 Response to "OpenCV Ubuntu C++ - Operasi morphology: erode dan dilate"
Post a Comment