光流的颜色编码显示

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
    # 完成后将结果赋给HSVH通道,不同的角度(方向)以不同颜色表示
    # 对于不同方向,产生不同色调
    # hsv[...,0]等价于hsv[:,:,0]
    hsv[..., 0] = ang * 180 / np.pi / 2

    # 将矢量大小标准化到0-255范围。因为OpenCVV分量对应的取值范围是256
    # 对于同一HS而言,向量的大小越大,对应颜色越亮
    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()

猜你喜欢

转载自blog.csdn.net/xiaojiajia007/article/details/79690721