Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah kita boleh meningkatkan pengesanan warna merah dalam OpenCV menggunakan ruang warna HSV?

Bagaimanakah kita boleh meningkatkan pengesanan warna merah dalam OpenCV menggunakan ruang warna HSV?

Patricia Arquette
Patricia Arquetteasal
2024-11-12 05:06:02777semak imbas

How can we enhance red color detection in OpenCV using HSV color space?

Pengesanan Warna Merah yang Dipertingkatkan dalam OpenCV menggunakan Ruang Warna HSV

Artikel ini bertujuan untuk meningkatkan ketepatan pengesanan warna merah dalam imej menggunakan HSV OpenCV warna ruang.

Masalah:

Mengesan segi empat tepat merah dalam imej menggunakan cv::inRange dan ruang warna HSV sedang menghasilkan hasil yang tidak memuaskan. Hasil yang diingini ialah mengasingkan segi empat tepat merah dengan berkesan.

Penyelesaian:

Dalam HSV, warna merah menjangkau julat yang melilit nilai 180. Untuk mengambil kira ini, julat HSV harus memasukkan nilai kedua-dua dalam [0,10] dan [170, 180].

Kemas Kini Kod:

Coretan kod berikut menunjukkan pendekatan yang dikemas kini:

# Include OpenCV library
import cv2

# Define HSV range for red color
H_MIN1 = 0
H_MAX1 = 10
H_MIN2 = 170
H_MAX2 = 180
S_MIN = 70
S_MAX = 255
V_MIN = 50
V_MAX = 255

# Read the input image
image = cv2.imread('image.png')

# Convert to HSV color space
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# Create masks for the two ranges of red hue
mask1 = cv2.inRange(hsv, (H_MIN1, S_MIN, V_MIN), (H_MAX1, S_MAX, V_MAX))
mask2 = cv2.inRange(hsv, (H_MIN2, S_MIN, V_MIN), (H_MAX2, S_MAX, V_MAX))

# Combine the masks
mask = cv2.bitwise_or(mask1, mask2)

# Display the resulting mask
cv2.imshow('Mask', mask)
cv2.waitKey(0)

Pendekatan Alternatif: Pengesanan Cyan

Kaedah lain yang berkesan ialah menyongsangkan imej BGR, menukar ia kepada HSV, dan asingkan warna cyan (pelengkap kepada merah). Ini menghapuskan keperluan untuk menyemak berbilang julat warna.

Kod untuk Pengesanan Cyan:

# Invert the BGR image
inverted = 255 - image

# Convert to HSV color space
hsv_inverted = cv2.cvtColor(inverted, cv2.COLOR_BGR2HSV)

# Isolate cyan color
cyan_mask = cv2.inRange(hsv_inverted, (90-10, S_MIN, V_MIN), (90+10, S_MAX, V_MAX))

# Display the cyan mask
cv2.imshow('Cyan Mask', cyan_mask)
cv2.waitKey(0)

Atas ialah kandungan terperinci Bagaimanakah kita boleh meningkatkan pengesanan warna merah dalam OpenCV menggunakan ruang warna HSV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn