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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 08:43:02871semak imbas

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

Pengesanan Warna Merah Dipertingkatkan Menggunakan OpenCV

Pengenalan

Apabila berurusan dengan pengesanan warna merah menggunakan warna OpenCV dan HSV ruang, ia boleh menjadi mencabar untuk mendapatkan hasil yang memuaskan. Walau bagaimanapun, dengan meneroka pelbagai pendekatan dan pelarasan parameter, penambahbaikan ketara boleh dibuat.

Masalah

Untuk meningkatkan pengesanan segi empat tepat merah dalam imej, kod berikut telah digunakan:

#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);
}

Walaupun melaraskan nilai HSV menggunakan bar jejak dinamik, hasil yang optimum kekal sukar difahami.

Penyelesaian

1 . Meluaskan Julat Nilai Hue:

Dalam ruang HSV, warna merah dililit sekitar 180. Oleh itu, untuk menangkap sepenuhnya julat merah, nilai rona (H) mesti mempertimbangkan kedua-duanya [0,10] dan [170, 180].

inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

2. Menyongsangkan Imej dan Mengesan Cyan:

Sebagai alternatif, pendekatan yang menarik ialah:

  • Terbalikkan imej BGR asal.
  • Tukar imej terbalik kepada HSV .
  • Kesan warna cyan (sekitar HSV 90) dan bukannya merah.

Kaedah ini berkesan mengesan pelengkap merah (cyan) dengan hanya satu julat dalam 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);

Kesimpulan

Dengan menggabungkan teknik yang dipertingkat ini, OpenCV dapat mengesan warna merah dengan lebih tepat dengan berkesan. Pendekatan ini menyediakan asas yang kukuh untuk pengoptimuman dan aplikasi selanjutnya dalam pelbagai senario pemprosesan imej.

Atas ialah kandungan terperinci Bagaimanakah saya 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