HSV 色空間を使用した OpenCV での赤色検出の改善
OpenCV では、HSV 色空間は特定の色を検出するための効果的なアプローチを提供します。赤も含めて。ただし、HSV の色相チャネルの円形の性質により、赤色が 180 度近くの値を囲む可能性があります。これにより、赤いオブジェクトを正確に検出する際に課題が生じる可能性があります。
この問題に対処するには、色相コンポーネントの 2 つの範囲 [0,10] と [170, 180] を考慮することで、より正確な検出を実現できます。両方の範囲を含めることで、赤色スペクトル全体を確実に検出できるようになります。
次の Python コードは、このアプローチを示しています。
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()
このコードは、画像内の赤い四角形を効果的に検出します。マスク出力に示されているように。
代替アプローチ
別の方法は、BGR 画像を反転してから HSV に変換することです。このアプローチは基本的に補色であるシアン (色相チャネルで 90 度) を検索し、単一の範囲で赤を検出できるようにします。
次の Python コードは、この手法を示しています。
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()
どちらのアプローチも、HSV 色空間で OpenCV を使用して赤色検出を改善し、画像処理アプリケーションにより正確な結果を提供します。
以上がHSV 色空間を使用して OpenCV でより正確な赤色検出を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。