web-dev-qa-db-ja.com

opencvでの黒色物体検出HSV範囲

黒色物体の検出範囲はどのくらいですか?

次のコードを試してみました

cvInRangeS(imgHSV, cvScalar(0, 0, 0, 0), cvScalar(0, 255, 255, 0), imgThreshold);

しかし、それは機能していません。

7
sushma ahirwar

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);
16
elvis.dukaj

[〜#〜] 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);
3
robbycandra

色相は、目が受ける主な光の波長のようなものです。しかし、ブラックライトの波長は可視光の波長範囲を超えています。色相はブラックライトを直接カウントしません。

値は明度/暗さの値です。照明条件が悪い場合、どの色相も黒と見なすことができます。

彩度は「クロマ」とも呼ばれます。これは、任意の色相の信号強度レベルを示しています。 S = 0の場合、色相は「黒」のように見えます。逆に、画像から(「暗さ」によってトリガーされる「黒」ではなく)真の黒をセグメント化する場合は、常に小さな彩度しきい値を設定することが最初の作業です。次に、色相マスクと値マスクを組み合わせて、セカンダリマスクがより正確な答えを提供します。

0
SonamYeshe