【问题标题】:How to calculate histogram on opencv without taking into consideration all black pixels on the image (due to a mask)如何在opencv上计算直方图而不考虑图像上的所有黑色像素(由于掩码)
【发布时间】:2020-07-15 18:21:22
【问题描述】:

我正在尝试获取图像的 HSV、LAB 直方图以提取某些特征,但如果直方图考虑了我拥有的区域的黑色像素,我实际上无法从我的特征中获得任何准确的结果蒙面,请问我该如何解决这个问题,非常感谢任何帮助。

我正在使用 python。

这是一个示例图像,这是我尝试使用的代码。enter image description here

hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hue = hsv_image[:,:,0].astype(float)
sat = hsv_image[:,:,1].astype(float)
val = hsv_image[:,:,2].astype(float)
hue[hue == 0] = np.nan
histr_lab = cv2.calcHist([hsv_image], [0], None, [255], [0, 255])
histr_lab1 = cv2.calcHist([hsv], [1], None, [255], [0, 255])
histr_lab2 = cv2.calcHist([hsv], [2], None, [255], [0, 255])

【问题讨论】:

  • 谢谢!我后来才意识到这一点; michamei 解决方案有效,我还添加了 mask 参数,并且都有效。

标签: opencv computer-vision


【解决方案1】:

在绘制直方图之前尝试过滤掉黑色像素 (val = 0):

hue = hue[numpy.where(val > 0,True,False)]
sat = sat[numpy.where(val > 0,True,False)]
val = val[numpy.where(val > 0,True,False)]

在计算直方图时尝试:

cv2.calcHist(hsv_image[np.where(val > 0,True, False)], [1],None, [255], [0, 255])

【讨论】:

  • 谢谢,成功了;我做的另一件事是将掩码放在 calcHist() 中,如下所示
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 2019-07-25
  • 2017-07-16
  • 2014-01-31
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多