2013-02-11 61 views
0

我想從圖像中識別獨特的顏色。我使用CvScalar loc = cvGet2D(img, i, j);, 並檢查位置是紅色還是綠色我使用CvScalar red = CvScalar.RED;。 但是,布爾評估永遠不會返回true,因爲我的圖像包含紅色陰影。是否有任何修改CvScalar的方法,使其忽略陰影,或者可能擺弄loc變量?在javacv中使用cvScalar?

回答

0

因爲紅色通道中最細微的位會破壞你的(二進制)問題:'它是綠色的嗎? 您可能會在此處使用某種「距離」獲得更好的結果。

服用,每次的L2範數的 '找到' 和 '期望的' 顏色,如:

SQRT(R * R + B * B + G * G);

和閾值差異(以決定它是否'足夠接近')可能更好地工作

0

OpenCV以BGR格式存儲圖像,所以要獲得綠色通道的值,您可以使用loc.val(1)(第二個通道),並獲取紅色通道,您可以使用loc.val(2)。這些將返回範圍[0,255]中的數字。然後,您可以比較紅色和綠色通道像素值,查看像素是紅色還是綠色。

然而,除了通過每個像素循環。將更好的(更快)的方法:

  1. 分割圖像分成用cvSplit個體紅色和綠色通道。
  2. 使用cvCmp比較紅色和綠色通道,生成紅色通道大於綠色通道的二進制圖像。