2014-01-13 2 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]) 

Как я могу использовать маску, я создаю известково гистограмму, так что я не нужен ж/г с диска?

+0

Проверьте тип маски, 'mask.dtype'. Это должно быть np.uint8. –

+0

print (type (mask.dtype)) -><тип 'numpy.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]) 
Смежные вопросы