1 使用场景说明

1、例如,我们要查看opencv中有哪些颜色查找表(LUT),查看如下;

cv2_luts = [lut for lut in dir(cv) if lut.startswith("COLORMAP_")]
print(f"opencv lut colormap number: {len(cv2_luts)}")
print(f"opencv luts colormap: {cv2_luts}")

输出结果如下:

opencv lut colormap number: 22
opencv luts colormap: ['COLORMAP_AUTUMN', 'COLORMAP_BONE', 'COLORMAP_CIVIDIS', 'COLORMAP_COOL', 'COLORMAP_DEEPGREEN', 
'COLORMAP_HOT', 'COLORMAP_HSV', 'COLORMAP_INFERNO', 'COLORMAP_JET', 'COLORMAP_MAGMA', 'COLORMAP_OCEAN', 'COLORMAP_PARULA', 
'COLORMAP_PINK', 'COLORMAP_PLASMA', 'COLORMAP_RAINBOW', 'COLORMAP_SPRING', 'COLORMAP_SUMMER', 'COLORMAP_TURBO', 
'COLORMAP_TWILIGHT', 'COLORMAP_TWILIGHT_SHIFTED', 'COLORMAP_VIRIDIS', 'COLORMAP_WINTER']

2、然后,我们像使用cv.applyColorMap(src, colormap)函数循环遍历显示所有的颜色查找表,但是可以看出我们上面过滤出的颜色查找表属性输出的是字符串类型,显然是不能够直接作为colormap的参数的

2 解决方式,使用eval()智能把字符串变成我们需要的属性

import cv2 as cv

cv2_luts = [lut for lut in dir(cv) if lut.startswith("COLORMAP_")]
print(f"opencv lut colormap number: {len(cv2_luts)}")
print(f"opencv luts colormap: {cv2_luts}")


print("cv.COLORMAP_COOL", type("cv.COLORMAP_COOL",))
print(eval("cv.COLORMAP_COOL"), type(eval("cv.COLORMAP_COOL")))


image = cv.imread('./messi5.jpg')
for idx, lut in enumerate(cv2_luts):
    print(f"lut{idx}: {lut}")
    dst = cv.applyColorMap(image, eval("cv."+lut))
    cv.imshow("cv."+lut, dst)
    cv.waitKey(0)

cv.destroyAllWindows()

可以着重看一下这两行代码;

print("cv.COLORMAP_COOL", type("cv.COLORMAP_COOL",))
print(eval("cv.COLORMAP_COOL"), type(eval("cv.COLORMAP_COOL")))

输出结果:

cv.COLORMAP_COOL <class 'str'>
8 <class 'int'>

这样,我们就可以很快速的查看一些模块中很多属性和方法的使用了!!!