Bagaimanakah saya boleh mencapai pengesanan warna merah yang lebih tepat dalam OpenCV menggunakan ruang warna HSV?

Mary-Kate Olsen
Lepaskan: 2024-11-22 08:53:10
asal
252 orang telah melayarinya

How can I achieve more precise red color detection in OpenCV using HSV color space?

Meningkatkan Pengesanan Warna Merah dengan OpenCV menggunakan Ruang Warna HSV

Dalam OpenCV, ruang warna HSV menawarkan pendekatan yang berkesan untuk mengesan warna tertentu, termasuk merah. Walau bagaimanapun, disebabkan sifat pekeliling saluran rona dalam HSV, warna merah boleh membungkus nilai hampir 180 darjah. Ini boleh menimbulkan cabaran dalam mengesan objek merah dengan tepat.

Untuk menangani isu ini, pengesanan yang lebih tepat boleh dicapai dengan mempertimbangkan dua julat untuk komponen rona: [0,10] dan [170, 180]. Dengan memasukkan kedua-dua julat, kami memastikan pengesanan meliputi keseluruhan spektrum warna merah.

Kod Python berikut menunjukkan pendekatan ini:

import cv2

# Read the input image
image = cv2.imread("path_to_image")

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

# Define HSV values for red color
hue_min1 = 0
hue_max1 = 10
hue_min2 = 170
hue_max2 = 180
sat_min = 70
sat_max = 255
val_min = 50
val_max = 255

# Create masks for the two hue ranges
mask1 = cv2.inRange(hsv, (hue_min1, sat_min, val_min), (hue_max1, sat_max, val_max))
mask2 = cv2.inRange(hsv, (hue_min2, sat_min, val_min), (hue_max2, sat_max, val_max))

# Combine the masks
mask = mask1 | mask2

# Display the mask
cv2.imshow("Mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
Salin selepas log masuk

Kod ini berkesan mengesan segi empat tepat merah dalam imej , seperti yang ditunjukkan dalam output topeng.

Alternatif Pendekatan

Kaedah alternatif ialah menyongsangkan imej BGR dan kemudian menukarnya kepada HSV. Pendekatan ini pada asasnya mencari warna pelengkap, cyan (90 darjah pada saluran rona), membolehkan anda mengesan merah dengan julat tunggal.

Kod Python berikut menunjukkan teknik ini:

import cv2

# Read the input image
image = cv2.imread("path_to_image")

# Invert the BGR image
inverted_image = cv2.bitwise_not(image)

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

# Define HSV values for cyan color (inverted red)
hue_min = 90 - 10
hue_max = 90 + 10
sat_min = 70
sat_max = 255
val_min = 50
val_max = 255

# Create a mask for the cyan color range
mask = cv2.inRange(hsv_inverted, (hue_min, sat_min, val_min), (hue_max, sat_max, val_max))

# Display the mask
cv2.imshow("Mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
Salin selepas log masuk

Kedua-dua pendekatan menawarkan pengesanan warna merah yang dipertingkat menggunakan OpenCV dalam ruang warna HSV, memberikan hasil yang lebih tepat untuk aplikasi pemprosesan imej.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan