Contents
Melanjutkan tutorial sebelumnya yaitu mendeteksi lingkaran dengan OpenCV dan Python, kali ini saya akan coba memporting script dalam bahasa pemrograman Delphi, khususnya delphi 10.4 Sydney. Mengapa menggunakan Delphi? karena Delphi ini berbasis bahasa Pascal yang lebih mudah dipahami dan kesukaan saya sejak jaman kuliah 😊. Dan saat ini Delphi sudah support compatibility dengan Python dengan berbagai macam kompleksitasnya. Bagaimananapun juga Delphi dan Python adalah dua bahasa pemrograman yang berbeda strukturalnya, jadi tetap akan ada perbedaannya penanganannya, cara pemrogramannya dan trik-triknya supaya dapat membangun sebuah aplikasi. yang ‘robust’.
Baiklah, untuk membangun aplikasi berbasis OpenCV silahkan instal dulu komponennya. Caranya bisa Anda ikuti di artikel instal ‘komponen Delphi OpenCV‘. Untuk sintaksnya sangat mirip dengan sintaks python, jadi kalau Anda sudah mengenal Python, saya rasa tidak akan kesulitan memahami openCV versi Delphi ini. Mungkin yang agak membingungkan adalah tipe variabel Delphi tapi mengadopsi gaya pemrograman Python, karena tidak umum seperti yang biasa digunakan programmer. Ok, untuk hal tersebut kita belajar sambil jalan aja ya. Sedangkan untuk contoh program OpenCV-Delphi untuk mendeteksi lingkaran ada di bawah ini
Komponen Delphi yang Dibutuhkan
Bikin project Delphi baru, kemudian ambil dua buah komponen Button di tab ‘Standard’ di Component Pallete dan ubah properti caption menjadi ‘open’ dan ‘proses’
Komponen | Properti | Nilai |
Button1 | caption | open |
Button2 | caption | proses |
Ambil komponen OpenPictureDialog di tab ‘Dialogs’ Component Pallete, kemudian isikan baris program sbb event onClick milik komponen Button1 (untuk mudahnya bisa langsung double click komponen Button)
procedure TForm1.Button1Click(Sender: TObject); begin if OpenPictureDialog1.Execute then if FileExists(OpenPictureDialog1.FileName) then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); filename:= PAnsiChar(AnsiString(OpenPictureDialog1.FileName)); showmessage(filename); end else { Otherwise raise an exception. } raise Exception.Create('File tidak ditemukan'); end;
Double click komponen Button2 kemudian isikan baris program sbb:
procedure TForm1.Button2Click(Sender: TObject); begin image := cvLoadImage(filename, CV_LOAD_IMAGE_GRAYSCALE); src := cvLoadImage(filename); storage := cvCreateMemStorage(0); cvSmooth(image, image, CV_GAUSSIAN, 5, 5); results := cvHoughCircles (image,storage,CV_HOUGH_GRADIENT,1,160,150,10,10,20); for i := 0 to results^.total - 1 do begin p := pFloatArray(cvGetSeqElem(results, i)); pt := CvPoint(cvRound(p^[0]), cvRound(p^[1])); cvCircle(src, pt, cvRound(p^[2]), CV_RGB(255, 0, 0),2); end; cvNamedWindow('Deteksi Lingkaran', 1); cvShowImage('Deteksi Lingkaran', src); cvWaitKey(0); cvReleaseMemStorage(storage); cvReleaseImage(image); cvReleaseImage(src); cvDestroyAllWindows(); end;
Unit Delphi yang dibutuhkan
Tambahkan file Unit berikut agar bisa me-run program di atas. Definisikan di bawah klause ‘Uses’
ocv.highgui_c, ocv.core_c, ocv.core.types_c, ocv.imgproc_c, ocv.imgproc.types_c
Variabel Delphi yang dibutuhkan
Definisikan variabel-varibel yang dibutuhkan berikut ini di bawah klausa ‘var’
var Form1: TForm1; image: pIplImage = nil; src: pIplImage = nil; storage: pCvMemStorage; results: pCvSeq; i: Integer; p: pFloatArray; pt: TCvPoint; filename:PAnsiChar;
Beberapa tipe data baru yang disesuaikan dengan gaya Python yaitu : pCvMemStorage, pCvSeq, pFloatArray, TCvPoint
Catatan: Anda harus sudah menginstal komponen OpenCV agar dapat menggunakan Unit dan tipe data di atas
Hasil Program Delphi-OpenCV
Sudah selesai, kini tinggal kita coba saja hasilnya (tekan F9 untuk me-run program)
Klik tombol ‘open’ kemudian pilih file gambar yang akan dicari lingkarannya
Kemudian klik tombol ‘proses’, maka akan terbuka jendela baru dengan lingkaran yang sudah terdeteksi (ditandai dengan penggambaran lingkaran merah)
Pembahasan program
Dari sekian baris program barangkali baris ini yang perlu Anda cermati
results := cvHoughCircles (image,storage,CV_HOUGH_GRADIENT,1,160,150,10,10,20);
Script inilah yang digunakan untuk mendeteksi lingkaran dalam sebuah gambar. Untuk parameter yang digunakan function cvHoughCircles adalah sbb: (urut dari kiri ke kanan)
‘image’ : file gambar yang mau dideteksi lingkarannya
‘storage’ : tempat penyimpanan data (adopsi Python)
‘CV_HOUGH_GRADIENT’ : metode deteksi lingkaran OpenCV (saat ini baru metode ini yang tersedia)
‘1’ : akurasi deteksi lingkaran
‘160’ : jarak antar lingkaran yang dideteksi
‘150’ : semakin besar nilai ini lingkaran semakin mudah ditemukan
’10’ : tingkat kepresisian deteksi lingkaran
’10’ : minimum radius lingkaran
’20’ : maksimum radius lingkaran
Angka-angka di atas sifatnya experimental ya, jadi mungkin akan berbeda jika file gambar berbeda.
Bagi Anda yang membutuhkan program di atas bisa didownload di sini. Semoga bermanfaat
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com