本教程开源,地址:https://gitee.com/zccbbg/opencv_study
cv2.waitKey函数会等待指定的毫秒数(在这里是1毫秒),并返回按键的ASCII码。通过检查返回值,你可以判断是否有键被按下。
下面这段代码定义了一个名为keys_demo的函数,该函数通过OpenCV库读取一张图片,并在窗口中显示该图片。用户可以通过按下键盘上的数字键1、2、3或Esc来执行不同的操作:将图片转换为灰度图、HSV颜色空间图、反转颜色或退出程序。最后,函数会关闭所有打开的窗口。
def keys_demo():
image = cv.imread("../images/test.jpg")
cv.namedWindow("input",cv.WINDOW_AUTOSIZE)
cv.imshow("input", image)
while True:
c=cv.waitKey(1)
if c==49: #1
# 将原始图像转换为灰度图像,使用cv.cvtColor函数和cv.COLOR_BGR2GRAY参数实现。
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
cv.imshow("result",gray)
if c==50: #2
# 将原始图像转换为HSV颜色空间图像,使用cv.cvtColor函数和cv.COLOR_BGR2HSV参数实现。
hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)
cv.imshow("result",hsv)
if c==51: #3
# 反转原始图像的颜色,使用cv.bitwise_not函数实现。
invert = cv.bitwise_not(image)
cv.imshow("result",invert)
if c==27:
break
cv.destroyAllWindows()
if __name__ == '__main__':
keys_demo()
cv.applyColorMap
函数是OpenCV中用于将灰度图像映射为伪彩色图像的函数。它允许你通过选择不同的颜色映射方案,将灰度值映射到不同的颜色,以增强图像的可视化效果。
函数原型如下:
dst = cv.applyColorMap(src, colormap)
src
: 输入的灰度图像。colormap
: 指定颜色映射方案的标识符,可选的取值有:
cv.COLORMAP_AUTUMN
cv.COLORMAP_BONE
cv.COLORMAP_JET
cv.COLORMAP_WINTER
cv.COLORMAP_RAINBOW
cv.COLORMAP_OCEAN
cv.COLORMAP_SUMMER
cv.COLORMAP_SPRING
cv.COLORMAP_COOL
cv.COLORMAP_HSV
cv.COLORMAP_PINK
cv.COLORMAP_HOT
等等,总共有多种颜色映射方案可供选择。
函数返回的dst
是伪彩色图像,其通道数与输入图像相同。这种伪彩色图像的生成方式是根据输入图像的灰度值,将每个像素的灰度值映射为相应颜色。
以下是一个简单的例子,演示了cv.applyColorMap
的用法:
import cv2 as cv
import numpy as np
# 生成一个简单的灰度图像
gray_image = np.random.randint(0, 256, (300, 300), dtype=np.uint8)
# 使用 applyColorMap 将灰度图像映射为伪彩色图像(Jet颜色映射)
color_mapped_image = cv.applyColorMap(gray_image, cv.COLORMAP_JET)
# 显示原始灰度图像和伪彩色图像
cv.imshow('Gray Image', gray_image)
cv.imshow('Color Mapped Image', color_mapped_image)
cv.waitKey(0)
cv.destroyAllWindows()
在这个例子中,生成了一个随机灰度图像,并使用Jet颜色映射方案将其转换为伪彩色图像。你可以尝试使用不同的颜色映射方案来获得不同的可视效果。
下面这段代码用于将不同的颜色映射应用到一张图像上,以改变图像的色调和外观。函数中定义了一个包含19种不同颜色映射的列表,然后通过循环不断选择其中一种颜色映射应用到原始图像上,并将结果显示在窗口中。用户可以通过按下ESC键退出循环。
def demo():
'''
定义了一个列表colormap,其中包含了多种颜色映射的选项,通过在图像上应用不同的颜色映射,可以改变图像的色调和外观。
共有19种不同的颜色映射选项,可以在cv.applyColorMap函数中使用。
'''
colormap = [
cv.COLORMAP_AUTUMN,
cv.COLORMAP_BONE,
cv.COLORMAP_JET,
cv.COLORMAP_WINTER,
cv.COLORMAP_RAINBOW,
cv.COLORMAP_OCEAN,
cv.COLORMAP_SUMMER,
cv.COLORMAP_SPRING,
cv.COLORMAP_COOL,
cv.COLORMAP_PINK,
cv.COLORMAP_HOT,
cv.COLORMAP_PARULA,
cv.COLORMAP_MAGMA,
cv.COLORMAP_INFERNO,
cv.COLORMAP_PLASMA,
cv.COLORMAP_VIRIDIS,
cv.COLORMAP_CIVIDIS,
cv.COLORMAP_TWILIGHT,
cv.COLORMAP_TWILIGHT_SHIFTED
]
image = cv.imread("../images/test.jpg")
cv.namedWindow("input",cv.WINDOW_AUTOSIZE)
cv.imshow("input", image)
index=0
while True:
'''
使用cv.applyColorMap函数将当前选定的颜色映射应用到原始图像上。
colormap[index % 19]选择颜色映射列表中的一个颜色映射,index % 19确保索引循环在0到18之间,以便循环应用不同的颜色映射。
'''
dst = cv.applyColorMap(image,colormap[index%19])
index+=1
cv.imshow("color style",dst)
c=cv.waitKey(200) # 等待200毫秒
if c==27:
break
cv.destroyAllWindows()
if __name__ == '__main__':
demo()