我使用反投影在知道人的直方图的图像中定位一个人。问题是它不适用于皮肤或透明衣服。这是我得到的:反投影结果
这是我用来计算感兴趣区域的 BGR 直方图的代码:
channels=[0,1,2]
histSize = [8,8,8]
ranges=[0,256, 0,256, 0,256]
#image is in BGR color
bgr_split = cv2.split(roi_img)
#Compute image bgr histogram
hist = cv2.calcHist(bgr_split, channels, mask, histSize, ranges)
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
我得到的直方图与人的颜色一致,但是当我在包含人的图像上应用反投影时,只有人的暗区域得到非零值,如Back-projection result所示。
我在一个像素上测试了直方图的反投影,但我不理解结果。我明白了:
>> hist[2,2,1]
83.539368
>> pix_img = np.uint8(np.array([[[66,66,34]]]))
>> cv2.calcBackProject([pix_img],channels,hist,ranges,1)
array([[0]], dtype=uint8)
像素 (b=66, g=66, r=34) 应对应于直方图 bin [2,2,1],因为 histSize = [8,8,8],但反投影返回 0 而不是 141。
知道我做错了什么吗?