opencv期末练习题(5)附带解析

根据R、G、B的值实时修改图像的颜色

复制代码
import cv2
import numpy as np

"""
滑动块调整图像灰度

1. 读取图片,并转为灰度图
2. 定义启动滑块和R、G、B滑块
3. 只有启动滑块的值为1时,拖动R、G、B滑块才生效
4. 根据R、G、B的值实时对修改图片的颜色操作
"""

enable = False
img = np.zeros((400, 400, 3), dtype='uint8')
# img = cv2.imread('img.png')
print(img)
def nothing(x):  # 滑动条修改后会触发这个事件,我们这个程序不需要所以置空
    pass


def enableButton(x):  # 启动滑块触发事件
    global enable
    enable = bool(x)


cv2.namedWindow("image")

# 创建调色板滑动条
cv2.createTrackbar('Enable', 'image', 0, 1, enableButton)  # 创建是否启用滑块,返回为0-1之间
cv2.createTrackbar('R', 'image', 0, 255, nothing)  # 创建R滑块,范围在0-255之间
cv2.createTrackbar('G', 'image', 0, 255, nothing)  # 创建G滑块,范围在0-255之间
cv2.createTrackbar('B', 'image', 0, 255, nothing)  # 创建B滑块,范围在0-255之间

while 1:
    cv2.imshow("image", img)
    k = cv2.waitKey(1)
    if k == ord('q'):  # 如果输入q则退出程序
        break
    if enable:  # 如果当前滑块状态是启动的话,则对图像进行二值化操作
        # 获取当前滑块的值
        r = cv2.getTrackbarPos("R", "image")
        g = cv2.getTrackbarPos("G", "image")
        b = cv2.getTrackbarPos("B", "image")
        # 将当前的图片所有像素替换为对应的r、g、b值组成的颜色
        img[:] = (b, g, r)

这段代码创建了一个窗口,其中包含一个启用/禁用滑块和分别用于调整红色(R)、绿色(G)和蓝色(B)通道的滑块。用户可以通过拖动滑块来实时调整图像的颜色。按下 'q' 键退出程序。

以下是代码的主要步骤:

  1. 初始化全局变量:enable 用于标记是否启用颜色调整。

  2. 创建一个黑色图像:img = np.zeros((400, 400, 3), dtype='uint8')

  3. 定义两个滑块触发函数:nothing(x) 为空函数,enableButton(x) 设置 enable 变量的值。

  4. 创建窗口和滑块:使用 cv2.namedWindow 创建窗口,使用 cv2.createTrackbar 创建启用滑块和三个颜色通道滑块。

  5. 进入死循环,实时显示当前图像,并等待用户的键盘输入。

  6. 如果用户按下 'q' 键,则退出程序。

  7. 如果启用了颜色调整,获取当前滑块的值,然后将图像的所有像素替换为对应的 R、G、B 值组成的颜色。

这个程序演示了如何使用 OpenCV 创建一个图像窗口,并通过滑块实时调整图像的颜色。

注意:img = np.zeros((400, 400, 3), dtype='uint8') 的dtype选项必须为unit8,不然会cv.show因为类型报错。

相关推荐
数字化脑洞实验室16 分钟前
如何理解不同行业AI决策系统的功能差异?
大数据·人工智能·算法
视觉语言导航18 分钟前
RAPID:基于逆强化学习的无人机视觉导航鲁棒且敏捷规划器
人工智能·无人机·具身智能
TextIn智能文档云平台20 分钟前
大模型文档解析技术有哪些?
人工智能
大明者省20 分钟前
案例分析交叉熵和交叉验证区别和联系
人工智能·深度学习·神经网络·计算机视觉·cnn
FL16238631292 小时前
古籍影文公开古籍OCR检测数据集VOC格式共计8个文件
人工智能·ocr
递归不收敛5 小时前
专属虚拟环境:Hugging Face数据集批量下载(无登录+国内加速)完整指南
人工智能·笔记·git·python·学习·pycharm
qq_271581796 小时前
Ubuntu OpenCV C++ 获取Astra Pro摄像头图像
人工智能·opencv·计算机视觉
电鱼智能的电小鱼6 小时前
基于电鱼 ARM 工控机的井下AI故障诊断方案——让煤矿远程监控更智能、更精准
网络·arm开发·人工智能·算法·边缘计算
拉姆哥的小屋6 小时前
时间序列早期分类中的置信度累积问题:从ECE-C到时序依赖建模
大数据·人工智能
蚁巡信息巡查系统7 小时前
政府网站与政务新媒体监测服务主要是做什么的?
大数据·人工智能