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

Mary-Kate Olsen
Lepaskan: 2024-11-16 08:43:02
asal
821 orang telah melayarinya

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);
}
Salin selepas log masuk

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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!

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