如何在Python中给出直方图掩膜

0 投票
1 回答
1128 浏览
提问于 2025-04-17 19:29

我刚开始学习Python,网上找到了一段代码可以用来计算图像的直方图。
我想计算图像某个局部区域的直方图,所以我尝试使用一个遮罩。
这是我的代码:

 i_rgb1 = cv2.imread(im1)
   img1 = cv2.cvtColor(i_rgb1, cv.CV_BGR2HSV)
   hist2 = np.zeros(img2.shape)

bins = np.arange(256).reshape(256, 1)
color = [(255, 0, 0), (0, 255, 0), (0, 0, 255)]

for labelx in xrange(len(label)):
    temp = labels_map.copy()
    temp[labels_map != label[labelx]] = 0
    temp[labels_map == label[labelx]] = 255
    cv2.imwrite('mask.png', temp)
    for ch, col in enumerate(color):
        hist_item1 = cv2.calcHist([img1], [ch], temp, [256], [0, 255])

其中,labels_map是一个图像矩阵,每个像素都有一个标签分配。
但是当我运行这段代码时,出现了一个错误,提示是:

OpenCV Error: Assertion failed (!mask.data || mask.type() == CV_8UC1) in unknown function

请帮我解决这个错误。

1 个回答

1

我认为这是因为temp不是一个uint8的掩码数组,你可以把它转换一下:

cv2.calcHist([img1], [ch], temp.astype(np.uint8), [256], [0, 255])

或者,在你创建它的时候:

temp = (labels_map == label[labelx]).astype(np.uint8)

撰写回答