我想計算圖像的直方圖。 我必須使用面具。我的面具應該看起來像黑白圖像? 黑色忽略空間,白色來計算?OpenCV直方圖蒙版
創建蒙版。我將白色像素(R> 220 & G> 220 & B> 220)替換爲黑色,其他替換爲白色。
我在做對吧?
我想計算圖像的直方圖。 我必須使用面具。我的面具應該看起來像黑白圖像? 黑色忽略空間,白色來計算?OpenCV直方圖蒙版
創建蒙版。我將白色像素(R> 220 & G> 220 & B> 220)替換爲黑色,其他替換爲白色。
我在做對吧?
如果您想要計算每個通道上像素值小於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,255) ',這不是白色的。它會發生,因爲'cv :: inRange'中的邏輯是AND。 – Soroush
這正是代碼所做的。他提到他正在尋找白色像素,因此我們必須首先找到它們,但他希望它們被遮擋,因此我們反轉了以前創建的遮罩。 看這張圖片: https://photos.app.goo.gl/dNLz8pdeIa4fkK5B2 通過使用'(0-220,0-220,0-220)'綁定: https://photos.app.goo .gl/HvNkQ0XfynRnzsIv2 – Soroush
我現在看到了,感謝您抽出時間---沒有意識到OP想要一個倒置的面具。我會刪除我的評論。 –
你對面具的一般理解是正確的。如果你要做的是計算值小於220的所有像素的直方圖,那麼你的方法是正確的。 –