如何使用掩码计算直方图OPENCV?

时间:2014-01-13 02:12:29

标签: python opencv image-processing computer-vision histogram

我需要仅在我的图像的一部分上计算直方图,但这部分具有圆形形状(如光盘)。我创建了掩码以在图像上找到该部分

    cv2.rectangle(mask,(0, 0), (width, height), (0,0,0), -1)
    cv2.circle(mask,(int(avgkrug[0]),int(avgkrug[1])),radijusp2,(255,255,255),-1)
    cv2.circle(mask,(int(avgkrug[0]),int(avgkrug[1])),radijusp1,(0,0,0),-1)

使用上面的代码,我找到了感兴趣的“圆盘形”区域。 现在我正在尝试计算直方图:

 for ch, col in enumerate(color):
    hist_item = cv2.calcHist([img],[ch],mask,[256],[0,255])
    ...

但是出现了这个错误

 error: (-215) !mask.data || mask.type() == CV_8UC1 in function cv::calcHist

但是,如果我在dics上保存掩码并使用cv2.imread()读取它,则不会出现此错误。 我也尝试过使用这一行

  hist_item = cv2.calcHist([slika],[ch],mask.astype(np.uint8),[256],[0,255])

如何使用我创建的掩码来计算直方图,所以我不需要从光盘中获取w / r?

1 个答案:

答案 0 :(得分:0)

您创建的蒙版需要为uint8类型,因此在创建蒙版时将其设为uint8,然后传递它以计算直方图。

mask = np.zeros(image.shape[:2], dtype="uint8")

现在通过传递原始图像和相应的蒙版来计算直方图。

hist_item = cv2.calcHist([image],[ch],mask,[256],[0,255])