Masalah:
Memandangkan imej yang mengandungi segi empat tepat merah, tugas adalah untuk meningkatkan ketepatan pengesanan warna merah menggunakan kaedah cv::inRange OpenCV dalam ruang warna HSV.
Pendekatan Asal:
int H_MIN = 0; int H_MAX = 10; int S_MIN = 70; int S_MAX = 255; int V_MIN = 50; int V_MAX = 255; cv::inRange( imageHSV, cv::Scalar( H_MIN, S_MIN, V_MIN ), cv::Scalar( H_MAX, S_MAX, V_MAX ), imgThreshold0 );
Pendekatan ini menyediakan keputusan yang tidak memuaskan.
Penyelesaian yang Diperbaiki:
Pendekatan asal gagal mengambil kira "pembungkusan" warna merah sekitar 180 darjah dalam ruang HSV. Untuk menangani perkara ini, julat H perlu memasukkan kedua-dua [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); Mat1b mask = mask1 | mask2;
Pendekatan yang dikemas kini ini menghasilkan hasil pengesanan yang lebih baik.
Alternatif Pendekatan:
Kaedah lain yang cekap ialah:
Mat3b bgr_inv = ~bgr; inRange(hsv_inv, Scalar(90 - 10, 70, 50), Scalar(90 + 10, 255, 255), mask); // Cyan is 90
Pendekatan alternatif ini menyediakan semakan julat tunggal dan menghasilkan hasil yang memuaskan.
Atas ialah kandungan terperinci Bagaimana untuk Meningkatkan Ketepatan Pengesanan Objek Merah dalam Ruang Warna HSV dengan OpenCV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!