Maison > développement back-end > C++ > le corps du texte

Comment puis-je améliorer la détection de la couleur rouge dans OpenCV en utilisant l'espace colorimétrique HSV ?

Mary-Kate Olsen
Libérer: 2024-11-16 08:43:02
original
822 Les gens l'ont consulté

How can I improve red color detection in OpenCV using HSV color space?

Détection améliorée de la couleur rouge à l'aide d'OpenCV

Introduction

Lors de la détection de la couleur rouge à l'aide d'OpenCV et de la couleur HSV espace, il peut être difficile d’obtenir des résultats satisfaisants. Cependant, en explorant diverses approches et ajustements de paramètres, des améliorations significatives peuvent être apportées.

Problème

Pour améliorer la détection d'un rectangle rouge dans une image, le code suivant a été utilisé :

#include <opencv2/opencv.hpp>

int main()
{
    // Image initialization
    Mat input = imread("path_to_image");

    // HSV conversion
    Mat imageHSV;
    cvtColor(input, imageHSV, COLOR_BGR2HSV);

    // HSV parameter ranges
    int H_MIN = 0;
    int H_MAX = 10;
    int S_MIN = 70;
    int S_MAX = 255;
    int V_MIN = 50;
    int V_MAX = 255;

    // Red color range in HSV
    cv::inRange(imageHSV, cv::Scalar(H_MIN, S_MIN, V_MIN),
                cv::Scalar(H_MAX, S_MAX, V_MAX), imgThreshold0);
}
Copier après la connexion

Malgré l'ajustement des valeurs HSV à l'aide de barres de suivi dynamiques, les résultats optimaux restent insaisissable.

Solutions

1. Plage de valeurs de teinte étendue :

Dans l'espace HSV, la couleur rouge s'enroule autour de 180. Par conséquent, pour capturer complètement toute la gamme de rouge, la valeur de teinte (H) doit prendre en compte à la fois [0,10] et [170, 180].

inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);
Copier après la connexion

2. Inversion de l'image et détection du cyan :

Alternativement, une approche intéressante consiste à :

  • Inverser l'image BGR originale.
  • Convertir l'image inversée en HSV .
  • Détecter la couleur cyan (environ HSV 90) au lieu de rouge.

Cette méthode détecte efficacement le complément du rouge (cyan) avec une seule plage en HSV.

// Invert original image
Mat3b bgr_inv = ~bgr;

// Convert to HSV
Mat3b hsv_inv;
cvtColor(bgr_inv, hsv_inv, COLOR_BGR2HSV);

// Detect cyan range
inRange(hsv_inv, Scalar(90 - 10, 70, 50), Scalar(90 + 10, 255, 255), mask);
Copier après la connexion

Conclusion

En incorporant ces techniques améliorées, OpenCV peut détecter efficacement la couleur rouge avec une plus grande précision. Ces approches fournissent une base solide pour d'autres optimisations et applications dans divers scénarios de traitement d'images.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal