2017-10-13 65 views
0

我想計算圖像的直方圖。 我必須使用面具。我的面具應該看起來像黑白圖像? 黑色忽略空間,白色來計算?OpenCV直方圖蒙版

創建蒙版。我將白色像素(R> 220 & G> 220 & B> 220)替換爲黑色,其他替換爲白色。

我在做對吧?

+1

你對面具的一般理解是正確的。如果你要做的是計算值小於220的所有像素的直方圖,那麼你的方法是正確的。 –

回答

2

如果您想要計算每個通道上像素值小於220的圖像部分的直方圖,那麼您的解決方法是正確的。 也要小心不要更換原始圖像上的像素。只需製作一個單通道cv::Mat,其高度和寬度與原始圖像相同。然後,根據原始圖像填充它的像素。 你也可以使用cv::inRange功能來製作這樣的面具:

cv::MAT mask; 
// make inverted mask in order to avoid masking pure red, green or blue 
cv::inRange(original_image, cv::Scalar(220, 220, 220), cv::Scalar(255, 255, 255), mask); 
// make non-inverted mask 
mask = 255 - mask; 
+0

如果你用這種方式編碼,你可能用像'(0,0,255) ',這不是白色的。它會發生,因爲'cv :: inRange'中的邏輯是AND。 – Soroush

+0

這正是代碼所做的。他提到他正在尋找白色像素,因此我們必須首先找到它們,但他希望它們被遮擋,因此我們反轉了以前創建的遮罩。 看這張圖片: https://photos.app.goo.gl/dNLz8pdeIa4fkK5B2 通過使用'(0-220,0-220,0-220)'綁定: https://photos.app.goo .gl/HvNkQ0XfynRnzsIv2 – Soroush

+0

我現在看到了,感謝您抽出時間---沒有意識到OP想要一個倒置的面具。我會刪除我的評論。 –