http://zhaoxuhui.top/blog/2017/06/28/%E5%9F%BA%E4%BA%8EPython%E7%9A%84OpenCV%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%8617.html
def show_color_vector(oriImg, paf_avg, heatmap_avg): hsv = np.zeros_like(oriImg) hsv[..., 1] = 255 # # 一次性显示所有limb的颜色编码图 # paf_mapx = np.zeros(paf_avg.shape[:-1]) # for t in [i for i in range(0,36) if i %2 ==0]: # paf_mapx = np.where(np.abs(paf_mapx)<np.abs(paf_avg[:,:,t]), paf_avg[:,:,t], paf_mapx) # # # paf_mapy = np.zeros(paf_avg.shape[:-1]) # for t in [i for i in range(0,36) if i %2 !=0]: # paf_mapy = np.where(np.abs(paf_mapy)<np.abs(paf_avg[:,:,t]), paf_avg[:,:,t], paf_mapy) # mag, ang = cv2.cartToPolar(paf_mapx, paf_mapy) mag, ang = cv2.cartToPolar(paf_avg[:,:,10], paf_avg[:,:,10]) # show the PAF # 将弧度转换为角度,同时OpenCV中的H范围是180(0 - 179),所以再除以2 # 完成后将结果赋给HSV的H通道,不同的角度(方向)以不同颜色表示 # 对于不同方向,产生不同色调 # hsv[...,0]等价于hsv[:,:,0] hsv[..., 0] = ang * 180 / np.pi / 2 # 将矢量大小标准化到0-255范围。因为OpenCV中V分量对应的取值范围是256 # 对于同一H、S而言,向量的大小越大,对应颜色越亮 hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX) # 最后,将生成好的HSV图像转换为BGR颜色空间 limb_flow = cv2.cvtColor(hsv, cv2.COLOR_HSV2RGB) plt.imshow(limb_flow) # show limb plt.imshow(oriImg[:,:,[2,1,0]]) plt.imshow(limb_flow, alpha=.5) plt.show() plt.imshow(oriImg[:,:,[2,1,0]]) # show a keypoint plt.imshow(paf_avg[:,:,8], alpha=.5) plt.show()