2014-01-13 67 views
3

我需要计算图像上只有一部分的直方图,但这部分有圆形(如圆盘)。我创建掩膜找到图像上的那部分如何使用掩码计算直方图OPENCV?

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阅读(),那么这个错误没有按” t出现。 我也尝试过这种使用这条线

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

我如何使用我创造calc下直方图面具,所以我不从光盘需要W/R?

+0

检查掩码的数据类型'mask.dtype'。它应该是np.uint8。 –

+0

print(type(mask.dtype)) - > print(np.result_type(mask.dtype)) - > uint8 错误仍然出现 – Error

回答

0

您创建的掩码需要为uint8类型,因此创建掩码时将其设置为uint8,然后通过它来计算直方图。

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

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

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