使用带有掩码的calcHist时出错

时间:2015-02-10 22:57:43

标签: python opencv

尝试使用带有掩码的calcHist时出现此错误:error: (-215) mask.size() == imsize && mask.channels() == 1 in function histPrepareImages

bgr_split = cv2.split(img)

hist_size = 256
c_range = [0, 256]
rows, _, _ = img.shape

b_hist = cv2.calcHist(bgr_split[0], [0], mask, [hist_size], c_range, False)

应该说当没有应用蒙版功能时它会起作用。实际图像的形状为(246,300,3),而面具的形状为(246,300,1)。

使用轮廓中包含的区域创建蒙版。

r, h, ch = img.shape
mask = np.zeros((r, h, 1), np.uint8)
contours, hier = cv2.findContours(edges, cv2.cv.CV_RETR_CCOMP, cv2.cv.CV_CHAIN_APPROX_NONE, (0, 0))
cv2.drawContours(mask, contours, 0, 255, cv2.cv.CV_FILLED)

有人能在这里发现问题吗?干杯

2 个答案:

答案 0 :(得分:2)

尝试在第一个输入参数周围添加括号。

  
    

b_hist = cv2.calcHist([bgr_split],[0],mask,[hist_size],c_range,False)

  

我在函数histPrepareImages中遇到了“错误:(-215)mask.size()== imsize&& mask.channels()== 1”的相同错误,并在为第一个参数添加括号后,错误消失了。

答案 1 :(得分:0)

计算直方图的行应为

b_hist = cv2.calcHist(bgr_split, [0], mask, [hist_size], c_range, False)

第二个参数(' [0]')已经表明您只想为第一个通道制作直方图。