黒色物体の検出範囲はどのくらいですか?
次のコードを試してみました
cvInRangeS(imgHSV, cvScalar(0, 0, 0, 0), cvScalar(0, 255, 255, 0), imgThreshold);
しかし、それは機能していません。
HSV範囲の白黒色の場合、色相を最大範囲(0〜180)に設定し、彩度を最大範囲(0〜255)に設定する必要があります。たとえば、黒の場合は0〜30または40、白の場合は200〜255などの値で遊ぶことができます。
// for black
cvInRangeS(imgHSV, cvScalar(0, 0, 0, 0), cvScalar(180, 255, 30, 0), imgThreshold);
// for white
cvInRangeS(imgHSV, cvScalar(0, 0, 200, 0), cvScalar(180, 255, 255, 0), imgThreshold);
または、C++インターフェイスを使用できます。
// for black
cv::inRange(imgHSV, cv::Scalar(0, 0, 0, 0), cv::Scalar(180, 255, 30, 0), imgThreshold);
// for white
cv::inRange(imgHSV, cv::Scalar(0, 0, 200, 0), cv::Scalar(180, 255, 255, 0), imgThreshold);
[〜#〜] hsv [〜#〜]および[〜#〜] hsl [〜#〜]色空間の黒色は、低い値(または[〜#〜] hsl [〜#〜])の明るさ。
[〜#〜] hsl [〜#〜]の白色が高い値で検出されました。白色は[〜#〜] hsv [〜#〜]高い明度と低い彩度で検出されます。
白用
cv::inRange(imgHSL, cv::Scalar(0, 0, 200, 0), cv::Scalar(180, 255, 255, 0), imgThreshold);
または
cv::inRange(imgHSV, cv::Scalar(0, 0, 200, 0), cv::Scalar(180, 20, 255, 0), imgThreshold);
色相は、目が受ける主な光の波長のようなものです。しかし、ブラックライトの波長は可視光の波長範囲を超えています。色相はブラックライトを直接カウントしません。
値は明度/暗さの値です。照明条件が悪い場合、どの色相も黒と見なすことができます。
彩度は「クロマ」とも呼ばれます。これは、任意の色相の信号強度レベルを示しています。 S = 0の場合、色相は「黒」のように見えます。逆に、画像から(「暗さ」によってトリガーされる「黒」ではなく)真の黒をセグメント化する場合は、常に小さな彩度しきい値を設定することが最初の作業です。次に、色相マスクと値マスクを組み合わせて、セカンダリマスクがより正確な答えを提供します。