OpenCV入门05:键盘响应操作和自带颜色表操作

发布时间:2024年01月11日

教程开源

本教程开源,地址: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()

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_27575627/article/details/135532458
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。