# Color Processor: Pemrosesan Citra Warna dan Pengubahan Warna Wajah Tugas mata kuliah **Pengolahan Citra Digital** (Gonzalez & Woods, Bab 6: *Color Image Processing*), ditulis dengan C++17 dan OpenCV. Program menerapkan enam operasi pemrosesan citra warna, lalu mendeteksi wajah dan mengubah warna kulitnya. Masukan dapat berupa berkas gambar atau kamera (*webcam*). - **Nama:** Efraim Melvyn Rafelino Lahai - **NRP:** 5803024009 - **Program Studi:** Informatika - **Dosen Pengajar:** Ir. Drs. Peter Rhatodirdjo Angka, M.Kom., IPM., ASEAN Eng. ## Fitur | No | Operasi | Fungsi | |----|---------|--------| | 1 | Komplemen warna | `computeComplement` | | 2 | Kurva S (penyesuaian nada) | `adjustToneSCurve` | | 3 | Ekualisasi histogram kanal *Value* (HSV) | `equalizeIntensityHSI` | | 4 | Pengirisan warna berbentuk bola 3D | `sliceColorSphere` | | 5 | Penajaman Laplacian | `sharpenLaplacian` | | 6 | Pseudowarna (JET) | `generatePseudocolor` | | 7 | Deteksi wajah (Haar cascade + CLAHE) | `detectFaces` | | 8 | Ubah warna kulit wajah (rotasi *Hue* di HSV, masker kulit YCrCb) | `recolorFace` | Pengubahan warna wajah memutar *Hue* sebesar 60 dan mengalikan *Saturation* dengan 1,3, sehingga kulit menjadi hijau. Nilai ini dapat diubah lewat `kHueShift` dan `kSatScale` di `color_processor.cpp`. ## Kebutuhan - Kompilator C++17 (diuji dengan MinGW-w64 GCC 16.1) - CMake 3.10 atau lebih baru - OpenCV 4.x dengan modul `core`, `imgproc`, `imgcodecs`, `videoio`, `highgui`, `objdetect` (diuji dengan 4.10.0) - Berkas `haarcascade_frontalface_default.xml` (ada di folder `etc/haarcascades` atau `data/haarcascades` pada instalasi OpenCV) > Catatan: pada MinGW, OpenCV harus dikompilasi dengan kompilator yang sama. Pada pengujian, MSMF dimatikan (`-DWITH_MSMF=OFF`) karena gagal dikompilasi dengan MinGW, sehingga kamera memakai DirectShow. ## Kompilasi ``` cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DOpenCV_DIR= cmake --build build ``` Contoh `OpenCV_DIR` pada Windows dengan MinGW: `D:/opencv/install/x64/mingw/lib`. Setelah *build*, CMake menyalin `haarcascade_frontalface_default.xml` dan DLL OpenCV ke folder `build/`. Jika berkas XML tidak ditemukan, program menampilkan pesan kesalahan; gunakan opsi `--cascade`. ## Penggunaan Jalankan dari dalam folder `build`, karena program mencari berkas XML di folder kerja. ``` # Mode berkas: jalankan semua operasi pada satu gambar .\color_processor.exe path\ke\foto.jpg # Mode kamera .\color_processor.exe --cam # Tentukan lokasi berkas cascade sendiri .\color_processor.exe foto.jpg --cascade path\ke\haarcascade_frontalface_default.xml ``` Tanpa argumen, program membuka kamera. **Mode berkas** menyimpan hasil ke `output_results/` dengan format PNG: ``` _complement.png _tone_scurve.png _hsi_equalized.png _color_sliced.png _sharpened.png _pseudocolor.png _face_recolor.png ``` **Mode kamera:** tekan `s` untuk menyimpan bingkai (`output_results/webcam_N.png`), `q` atau `Esc` untuk keluar. ## Struktur Proyek ``` . ├── color_processor.cpp # kode program ├── CMakeLists.txt ├── report/ # laporan LaTeX dan gambar hasil └── README.md ``` ## Keterbatasan - Haar cascade bergantung pada pencahayaan. Pada ruangan redup, wajah dapat gagal terdeteksi. - Wajah yang menunduk, miring, atau tertutup (misalnya topi) sulit dideteksi. - Menurunkan ambang deteksi menambah kemungkinan positif palsu. - Rentang warna kulit di YCrCb bersifat tetap, sehingga objek berwarna serupa di dalam kotak wajah (misalnya tepi topi krem) dapat ikut berubah. - Pengirisan warna memakai satu warna prototipe tetap, sehingga hanya cocok untuk satu nada kulit. - Mode kamera belum diuji ulang pada kondisi redup setelah penggantian ke CLAHE. ## Referensi - R. C. Gonzalez dan R. E. Woods, *Digital Image Processing*, Bab 6. - OpenCV: