Rabu, 16 Desember 2020

Opencv gambar bgr to gray ,bgr to hsv

pengertian hsv adalah  model yang mewakili ruang warna yang mirip dengan model warna RGB. Karena saluran hue memodelkan jenis warna, ini sangat berguna dalam tugas pemrosesan gambar yang perlu menyegmentasikan objek berdasarkan warnanya. Variasi saturasi berubah dari tidak jenuh menjadi warna abu-abu dan jenuh penuh (tanpa komponen putih). Value channel menggambarkan kecerahan atau intensitas warna. Gambar berikutnya menunjukkan silinder HSV.

Threshold_inRange_HSV_colorspace.jpg

Karena warna dalam ruang warna RGB dikodekan menggunakan tiga saluran, maka lebih sulit untuk menyegmentasikan objek dalam gambar berdasarkan warnanya.


Threshold_inRange_RGB_colorspace.jpg


untuk konversi warna kita akan menggunakan fungsi cv2.cvtColor(input_image, flag)dimana flag menentukan conversi

untuk konversi bgr>gray kita menggunakan flag cv2.COLOR_BGR2GRAY. untuk bgr > hsv kita menggunakan cv2.COLOR_BGR2HSV

sebenernya ada banyak flag dari cv2 untuk konvert ke lainnya untuk mengetahui apa aja yang ada kamu bisa run kode di terminal python kamu dengan kode ini

>>import cv2

>>flags = [i for i in dir(cv2) if i.startswith('COLOR_')]

>>print flags

Untuk HSV, Hue range [0,179], Saturation range [0,255] dan Value range [0,255]. Perangkat lunak yang berbeda menggunakan skala yang berbeda. Jadi jika Anda membandingkan nilai OpenCV dengan mereka, Anda perlu menormalkan rentang ini.


Object Tracking

Sekarang kita tahu cara mengonversi gambar BGR ke HSV, kita dapat menggunakan ini untuk mengekstrak objek berwarna. Di HSV, lebih mudah untuk merepresentasikan warna daripada ruang warna RGB. Dalam aplikasi kami, kami akan mencoba mengekstrak objek berwarna biru. Jadi inilah caranya:

>Rekam setiap frame video

>Konversi dari BGR ke ruang warna HSV

>Kami membatasi citra HSV untuk rentang warna biru

>Sekarang ekstrak objek biru saja, kita dapat melakukan apapun pada gambar yang kita inginkan.

kode program sebagai contoh

import cv2

import numpy as np

cap = cv2.VideoCapture(0)#ambil vidio

while(1):

  # Take each frame

    _, frame = cap.read()#ambilperframe


    # Convert BGR to HSV

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)


    # define range of blue color in HSV

    lower_blue = np.array([110,50,50])

    upper_blue = np.array([130,255,255])


    # Threshold the HSV image to get only blue colors

    mask = cv2.inRange(hsv, lower_blue, upper_blue)


    # Bitwise-AND mask and original image

    res = cv2.bitwise_and(frame,frame, mask= mask)


    cv2.imshow('frame',frame)

    cv2.imshow('mask',mask)

    cv2.imshow('res',res)

    k = cv2.waitKey(5) & 0xFF

    if k == 2:

        break


cv2.destroyAllWindows()

gambar kira2 akan seperti ini

Ada beberapa noise pada gambar. Kami akan melihat cara menghapusnya
kisaran warna2 lainnya antara lain adalah sbb:
  • [0, 0, 0], [255, 255, 150] – Hitam
  • [0, 100, 100], [3, 255, 255] – Merah
  • [4, 100, 100], [18, 255, 255] – Orange
  • [20, 100, 100], [40, 255, 255] – Kuning
  • [50, 100, 100], [70, 255, 255] – Hijau
  • [100, 100, 100], [120, 255, 255] – Biru
  • [120, 100, 100], [140, 255, 255] – Ungu
  • [0, 0, 0], [255, 255, 140] – Abu-Abu
  • [0, 0, 0], [255, 255, 200] – Putih
  • [14, 100, 100], [34, 255, 140] – Emas
  • [0, 0, 0], [255, 255, 120] – Silver

Ini adalah metode paling sederhana dalam pelacakan objek. Setelah Anda mempelajari fungsi kontur, Anda dapat melakukan banyak hal seperti menemukan pusat massa objek ini dan menggunakannya untuk melacak objek, menggambar diagram hanya dengan menggerakkan tangan di depan kamera dan banyak hal lucu lainnya.

bagaimana Cara menemukan nilai HSV untuk dilacak??nilai hsv disini maksudnya nilai warna biru seperti dicontoh itu adalah deteksi warna biru
Ini adalah pertanyaan umum yang ditemukan di stackoverflow.com. Ini sangat sederhana dan Anda dapat menggunakan fungsi yang sama, cv2.cvtColor (). Alih-alih meneruskan gambar, Anda cukup meneruskan nilai BGR yang Anda inginkan. Misalnya, untuk menemukan nilai HSV Green, coba perintah berikut di terminal Python:
 >>>green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
>>> print hsv_green
[[[ 60 255 255]]]
Sekarang Anda mengambil [H-10, 100.100] dan [H + 10, 255, 255] 
sebagai batas bawah dan batas atas. Selain metode ini, Anda
dapat menggunakan alat pengeditan gambar apa pun seperti GIMP 
atau konverter online apa pun untuk menemukan nilai ini, tetapi
 jangan lupa untuk menyesuaikan rentang HSV.
fungsi2 yang kita pakai dalam kode ini adalah


cap = cv2.VideoCapture(0)#ambil vidio

    _, frame = cap.read()#ambilperframe

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # Convert BGR to HSV

    lower_blue = np.array([110,50,50]) # define range of blue color in HSV

    upper_blue = np.array([130,255,255])

    mask = cv2.inRange(hsv, lower_blue, upper_blue)  # Threshold the HSV image to get only blue colors

    res = cv2.bitwise_and(frame,frame, mask= mask)  # Bitwise-AND mask and original image

    cv2.imshow('frame',frame)#menampilkan gambar

    cv2.imshow('mask',mask)

    cv2.imshow('res',res)

  




Tidak ada komentar:

Posting Komentar