Deteksi Warna Dominan dari Webcam menggunakan Python

Setiap gambar yang ada saat ini memiliki ruang untuk merepresentasikan warna-warna yang ada di dalamnya. Contoh warna yang umum ditemui adalah RGB, CMYK, Grayscale, HSV dan lain sebagainya. Dalam tutorial ini, kita akan program sederhana untuk mengetahui warna dominan menggunakan Python. Program sederhana ini nantinya akan tersambung dengan webcam yang ada pada Laptop / PC kemudian menampilkan keterangan warna dominan yang ditangkap oleh webcam.

Langkah 1: Impor Library yang Diperlukan

Library yang dipakai adalah OpenCV dan NumPy.

import cv2
import numpy as np

Library cv2 berfungsi untuk pemrosesan gambar dan numpy untuk perhitungan numerik.

Langkah 2: Fungsi untuk Mendeteksi Warna Dominan

Fungsi warna_dominan(frame) yang memisahkan komponen warna (biru, hijau, merah) dari setiap frame dan menghitung nilai rata-rata untuk masing-masing komponen warna tersebut.

def find_dominant_color(frame):
    # Memisahkan frame menjadi komponen warna (biru, hijau, merah)
    b, g, r = cv2.split(frame)

    # Menghitung nilai rata-rata untuk setiap komponen warna
    b_mean = np.mean(b)
    g_mean = np.mean(g)
    r_mean = np.mean(r)

    if max(b_mean, g_mean, r_mean) == r_mean:
        return f"Red {r_mean:.2f}"
    elif max(b_mean, g_mean, r_mean) == g_mean:
        return f"Green {g_mean:.2f}"
    else:
        return f"Blue {g_mean:.2f}"

Fungsi ini bertujuan untuk mengidentifikasi warna dominan dalam sebuah frame. Fungsi cv2.split() berguna untuk memisahkan satu frame dengan 3 channel menjadi tiga frame dengan 1 channel yang merepresentasikan warna biru, hijau, dan merah. Fungsi np.mean() berguna untuk menghitung nilai rata-rata dari setiap komponen yang kemudian akan dibandingkan menggunakan fungsi max().

Langkah 3: Fungsimain()

Kemudian, kita akan membuat fungsi utama main(). Yang akan kita lakukan adalah membuka webcam, membaca setiap frame dari webcam, mendeteksi warna dominan dalam setiap frame, dan menampilkan teks warna dominan pada layar.

def main():
    # Membuka webcam
    vid = cv2.VideoCapture(0)

    while True:
        # Membaca frame saat ini dari webcam
        _, frame = vid.read()

        # Menemukan warna dominan dalam frame saat ini
        dominant_color = find_dominant_color(frame)

        # Menampilkan teks warna dominan pada frame
        cv2.putText(frame, "Dominant Color: " + dominant_color,
                    (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

        # Menampilkan frame saat ini
        cv2.imshow("Deteksi RGB", frame)

        # Menghentikan loop jika tombol 'q' ditekan
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # Melepaskan webcam dan menutup semua jendela OpenCV
    vid.release()
    cv2.destroyAllWindows()

Fungsi _, frame = vid.read() berfungsi untuk membaca frame video dari webcam menggunakan objek vid yang telah dibuat. Fungsi vid.read() mengembalikan dua nilai, namun dalam hal ini kita hanya menggunakan frame itu sendiri dan menyimpannya ke dalam variabel frame.

Fungsi cv2.VideoCapture(0) berfungsi untuk membuka webcam, indeks 0 yang dimasukkan menandakan bahwa yang dibaca adalah kamera default. Jika kita memiliki lebih dari satu kamera yang tersambung, kita bisa memasukkan nilai lain seperti 1 atau 2 yang menandakan kamera mana yang akan digunakan. Fungsi cv2.putText() digunakan untuk menambahkan teks pada gambar, fungsi ini diberikan beberapa parameter antara lain: - frame: frame gambar di mana teks akan ditambahkan. - "Dominant Color: " + dominant_color: teks yang akan ditambahkan ke frame. dominant_color adalah variabel yang menyimpan warna dominan. - (10, 30): koordinat di mana teks akan ditampilkan dalam frame (10 pixel dari kiri dan 30 pixel dari atas). - cv2.FONT_HERSHEY_SIMPLEX: jenis font yang digunakan untuk teks. - 1: skala teks. - (0, 255, 0): warna teks (dalam format BGR), dalam hal ini hijau. - 2: ketebalan garis untuk teks.

Kode if cv2.waitKey(1) & 0xFF == ord('q'): merupakan bagian dari kontrol untuk loop yang digunakan untuk menghentikan program saat tombol "q" ditekan. cv2.waitKey(1) akan menunggu selama 1 milidetik (sebelum loop berputar lagi) untuk menangkap input dari pengguna. Jika input adalah tombol "q", maka program akan keluar dari loop dengan statement break. Kemudian vid.release() digunakan untuk melepaskankan webcam setelah selesai digunakan. Dan yang terakhir cv2.destroyAllWindows() digunakan untuk menutup semua jendela yang dibuat oleh OpenCV.

Penutup

Dengan mengikuti langkah-langkah di atas, kita bisa membuat program Python sederhana yang mendeteksi warna dominan dalam video dari webcam kita. Untuk semakin mengembangkan kemampuan, kita bisa mencoba proyek-proyek lain yang masih berkaitan dengan penggunaan library OpenCV seperti deteksi wajah ataupun deteksi tepi. Sekian, terima kasih!

Link project : Github