我只需要在图像的一部分上计算直方图,但是这部分具有圆形形状(如光盘)。我创建蒙版以在图像上找到该部分
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?
最佳答案
您创建的遮罩必须为uint8
类型,因此在创建遮罩时将其设为uint8,然后将其传递以计算直方图。
mask = np.zeros(image.shape[:2], dtype="uint8")
现在通过传递原始图像和相应的蒙版来计算直方图。
hist_item = cv2.calcHist([image],[ch],mask,[256],[0,255])
关于python - 如何使用 mask 计算直方图OPENCV?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21082884/