Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0632
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在:
个人网站: `https://oeasy.org`
蓝桥云课: `https://www.lanqiao.cn/courses/3584`
GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次研究了图像的色阶效果
- Levels
- 可以设置
- 输入黑白场
- 输出黑白场
- 中间调灰场
- 图像就会有不同的效果
- 最后其实发现一种有趣的东西叫做LUT
- 这个LUT是什么意思呢?
- 这个单词其实无处不在
- 我们在调节照片风格的时候
- 最常见的就是应用LUTs
- 有各种各样的Luts
- 在图像处理和视频处理软件中有很多应用
- 这个单词什么意思呢?
- LUT 的意思就是
- LookUp Table
- 查表
- 含义来自于古代数学的查表
- 三角函数表
- 对数表
- 等等
- 在图像处理领域
- 查什么表呢?
-
处理颜色的时候
- 会有一个颜色映射表
- 以8-bit的灰度图为例
-
原来是一个什么样的数字
- 现在映射到哪个数字上去
- 这是一个对应矩阵
- 从0到255都有映射
- 具体怎么玩呢?
import cv2
import numpy as np
image = cv2.imread("/home/shiyanlou/gear.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow('before', image)
table = np.zeros(256, np.uint8)
for i in range(256):
table[i] = 255 -i
new_image = cv2.LUT(image, table)
cv2.imshow('after', new_image)
key = cv2.waitKey()
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()
- 这里的table是一个反相的table
- 可以做一个阈值的table吗?
import cv2
import numpy as np
image = cv2.imread("/home/shiyanlou/gear.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow('before', image)
table = np.zeros(256, np.uint8)
for i in range(256):
if i < 58:
table[i] = 0
else:
table[i] = 255
new_image = cv2.LUT(image, table)
cv2.imshow('after', new_image)
key = cv2.waitKey()
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()
- 分界处左右分开
- 黑白分明
import cv2
import numpy as np
image = cv2.imread("/home/shiyanlou/gear.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow('before', image)
table = np.zeros(256, np.uint8)
for i in range(256):
table[i] = int(i/10)*10
print(table)
new_image = cv2.LUT(image, table)
cv2.imshow('after', new_image)
key = cv2.waitKey()
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()
- 效果如下
- 这个阶梯是在看不出来啊
import cv2
import numpy as np
width = 400
height = 300
image = np.ones((height, width), dtype=np.uint8)
for num in range(width):
image[:, num] = 0 + num / (width - 1) * 255
cv2.imshow('before', image)
table = np.zeros(256, np.uint8)
for i in range(256):
table[i] = int(i/10)*10
print(table)
new_image = cv2.LUT(image, table)
cv2.imshow('after', new_image)
key = cv2.waitKey()
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()
- 可以更清晰地看见色阶的感觉
- 其实本质上也是一种映射关系
- 阴影中的细节,和高光中的细节
- 也可以通过映射的方式得到细节
import numpy as np
import cv2
img = cv2.imread('monkey.png', cv2.IMREAD_GRAYSCALE)
color_img = cv2.applyColorMap(img, cv2.COLORMAP_JET)
cv2.imshow('gray', img)
cv2.imshow('color', color_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
- 这相当于ps中的渐变映射
- 那这具体是如何映射的呢?
import numpy as np
import cv2
height = 100
width = 200
img = np.ones((height, width), dtype=np.uint8)
for num in range(width):
img[:, num] = 0 + num / (width - 1) * 255
color_img = cv2.applyColorMap(img, cv2.COLORMAP_JET)
cv2.imshow('gray', img)
cv2.imshow('color', color_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
- cv2.COLORMAP_JET 可以将黑白渐变
- 映射到一个七彩的渐变上
- 将一个[0,255]的亮度值
- 对应到RGB三元组的具体数值
- 还有其他的映射关系吗?
- 这次研究了LUT
- LookUp Table
- 颜色映射表
- 通过LUT可以做很多事
- 阈值
- 色阶
- 曲线
- 反相
- 甚至映射到色彩空间
- 还能玩什么吗?🤔
- 下次再说👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。












