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()
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()
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!