前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python学习(8)—— OpenCV 颜色表操作

OpenCV-Python学习(8)—— OpenCV 颜色表操作

作者头像
Rattenking
发布2022-10-24 16:00:34
1.6K0
发布2022-10-24 16:00:34
举报
文章被收录于专栏:RattenkingRattenking

1. 知识点

  1. 学习查找表 cv.LUT()【look up table】;
  2. 颜色查找表;
  3. 函数 cv.applyColorMap() 的使用。

2. cv.LUT() 函数说明

2.1 函数使用
代码语言:javascript
复制
cv.LUT(src, lut, dst)
2.2 参数说明

参数

说明

src

表示原始图像。

lut

表示查找表的地址,对于多通道图像的查找,它可以有一个通道,也可以与原始图像有相同的通道。

dst

表示输出图像。

2.3 查找表的使用和优点
  1. 构建查找表;
  2. 查找表应用;

查找表优势,预计算,空间换时间,避免重复计算,节约计算时间。

3. cv.applyColorMap() 函数说明

3.1 函数使用
代码语言:javascript
复制
cv.applyColorMap(src, colormap[,dst])
3.2 参数说明

参数

说明

src

表示输入图像。

colormap

表示颜色表。

dst

表示输出图像。

3.3 系统查找表 colormap 说明

colormap为颜色图模式,可以传入整数0~21对应各种不同的颜色图,或者用cv2.COLORMAP_AUTUMN(等价于0)、cv2.COLORMAP_BONE(等价于1)等方式传入,OpenCV源码头文件中定义的22种模式如下:

代码语言:javascript
复制
ColormapTypes = (
  'COLORMAP_AUTUMN', # 0
  'COLORMAP_BONE', # 1
  'COLORMAP_JET', # 2
  'COLORMAP_WINTER', # 3
  'COLORMAP_RAINBOW', # 4
  'COLORMAP_OCEAN', # 5
  'COLORMAP_SUMMER', # 6
  'COLORMAP_SPRING', # 7
  'COLORMAP_COOL', # 8
  'COLORMAP_HSV', # 9
  'COLORMAP_PINK', # 10
  'COLORMAP_HOT', # 11
  'COLORMAP_PARULA', # 12
  'COLORMAP_MAGMA', # 13
  'COLORMAP_INFERNO', # 14
  'COLORMAP_PLASMA', # 15
  'COLORMAP_VIRIDIS', # 16
  'COLORMAP_CIVIDIS', # 17
  'COLORMAP_TWILIGHT', # 18
  'COLORMAP_TWILIGHT_SHIFTED', # 19
  'COLORMAP_TURBO', # 20
  'COLORMAP_DEEPGREEN' # 21
)

各种ColormapTypes对应的色彩是下图这样的,有各种春夏秋冬四季风格、冷热风格等等:

在这里插入图片描述
在这里插入图片描述

4. 系统查找表实例

  1. 使用系统查找表实现图片的幻灯片切换;
  2. 间隔时间1s切换一次。
4.1 实现代码
  1. 定义系统查找表的type常量列表 ColormapTypes;
  2. 使用 cv.imread() 读取图片;
  3. 定义一个切换的变量 index = 0;
  4. 循环判断,只要 index 没有大于等于 ColormapTypes 的长度,按照 index 对应的模式显示图片;
  5. 1000ms 后操作 index = index + 1;
  6. 跳出循环后,销毁窗口。
代码语言:javascript
复制
import cv2 as cv

ColormapTypes = (
  'COLORMAP_AUTUMN', # 0
  'COLORMAP_BONE', # 1
  'COLORMAP_JET', # 2
  'COLORMAP_WINTER', # 3
  'COLORMAP_RAINBOW', # 4
  'COLORMAP_OCEAN', # 5
  'COLORMAP_SUMMER', # 6
  'COLORMAP_SPRING', # 7
  'COLORMAP_COOL', # 8
  'COLORMAP_HSV', # 9
  'COLORMAP_PINK', # 10
  'COLORMAP_HOT', # 11
  'COLORMAP_PARULA', # 12
  'COLORMAP_MAGMA', # 13
  'COLORMAP_INFERNO', # 14
  'COLORMAP_PLASMA', # 15
  'COLORMAP_VIRIDIS', # 16
  'COLORMAP_CIVIDIS', # 17
  'COLORMAP_TWILIGHT', # 18
  'COLORMAP_TWILIGHT_SHIFTED', # 19
  'COLORMAP_TURBO', # 20
  'COLORMAP_DEEPGREEN' # 21
)

def use_system_lut_demo():
  img = cv.imread('./images/butterfly.jpg')
  index = 0

  while True:
    if index >= len(ColormapTypes):
      break

    dst = cv.applyColorMap(img, index)
    cv.imshow('system_lut_window', dst)
    cv.waitKey(1000)
    index = index + 1
    
  cv.destroyAllWindows()

if __name__ == "__main__":
  use_system_lut_demo()
4.2 实现效果
在这里插入图片描述
在这里插入图片描述

5. 自定义查找表

  1. 自定义一个取反查找表;
  2. 使用取反查找表读取图片显示;
5.1 代码
  1. 使用 cv.imread() 读取图片;
  2. 使用 np.zeros((256,1,3), dtype=np.uint8) 全部是0的查找表;
  3. 循环给查找表赋值,颜色取反;
  4. 使用自定义查找表;
  5. 显示取反后的图片。
代码语言:javascript
复制
import cv2 as cv
import numpy as np

def use_custom_lut_demo():
  img = cv.imread('./images/butterfly.jpg')
  lut3 = np.zeros((256,1,3), dtype=np.uint8)
  for i in range(256):
    lut3[i,0] = 255 - i
  
  dst = cv.LUT(img, lut3)
  cv.imshow('custom_lut_window', dst)
  cv.waitKey(0)
  cv.destroyAllWindows()

if __name__ == "__main__":
  use_custom_lut_demo()
5.2 结果
在这里插入图片描述
在这里插入图片描述

6. 总结

  1. 虽然手动遍历可以达到同样效果,但尽量使用 OpenCV 内置函数。调用LUT 函数可以获得最快的速度,这是因为OpenCV库可以通过英特尔线程架构启用多线程;
  2. 学会 cv.LUT() 的使用,cv.LUT() 自定义查找表的时候使用的函数;
  3. 学会 cv.applyColorMap() 的使用,**cv.applyColorMap()**使用系统查找表的时候使用的函数。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 知识点
  • 2. cv.LUT() 函数说明
    • 2.1 函数使用
      • 2.2 参数说明
        • 2.3 查找表的使用和优点
        • 3. cv.applyColorMap() 函数说明
          • 3.1 函数使用
            • 3.2 参数说明
              • 3.3 系统查找表 colormap 说明
              • 4. 系统查找表实例
                • 4.1 实现代码
                  • 4.2 实现效果
                  • 5. 自定义查找表
                    • 5.1 代码
                      • 5.2 结果
                      • 6. 总结
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档