Python - OpenCV BGR 调色板和滑块

12 Apr 2025 | 7 分钟阅读

OpenCV 是计算机视觉领域使用最广泛、最强大的开源库之一。OpenCV 的最显著特点包括支持多色彩空间,以及其默认的 BGR 格式。在此意义上,BGR(蓝、绿、红)是一种表示方法,用于确定三种基本颜色通道,这些通道以不同的强度组合,将产生图像中的所有颜色范围。这种布局与通常的 RGB(红、绿、蓝)略有不同,但对于在 OpenCV 环境中的处理是完全适应的。

OpenCV 中一个精美的交互式功能界面是 BGR 调色板,并配有滑块界面。这个用户友好的图形界面本质上是为了帮助用户实时快速地调整蓝色、绿色和红色通道的强度。用户可以使用滑块来尝试不同的颜色组合,并立即在图像上看到结果,从而实现对色彩平衡和色调的精确控制。

在涉及图像处理、计算机视觉和机器学习的应用中,当需要修改颜色以增强其特征或实现图像的某些美学要求时,BGR 与滑块的结合得到了广泛应用。

BGR 色彩空间

BGR 色彩空间通过三个不同的通道——蓝色、绿色和红色——来显示图像中的颜色,因此每个通道都包含一种原色所对应的强度值,这些值组合起来形成全彩图像。BGR 在计算机视觉和图像处理中被广泛使用,因为它允许轻松地修改每种颜色的单独通道——这对于许多应用来说是一个重要的考虑因素,范围从基本的颜色校正到复杂的对象检测。

这就是为什么 BGR 在大多数 OpenCV 工具中已成为自动标准的原因;因为越来越多的数码相机和图像传感器以 BGR 格式捕获图像。通过控制每种不同颜色组件的照明,可以优化 BGR 中的各个通道,以便在精确的条件下使用这些图像来检测和识别各种对象。这些预处理步骤对于基于图像的机器学习模型中的各种步骤来说非常必要,因为统一的颜色编码通常可以提高模型性能。

例如,在 OpenCV 中,用户可以直接处理每个颜色通道来改变图像的色彩平衡或增强某些特征,这使得 BGR 非常灵活和强大。因此,改变蓝色、绿色或红色的强度将使用户能够准确地修改图像的外观,增强其可见性,或因光照变化而减弱其效果,这在计算机视觉的实际应用中至关重要。

使用 Python OpenCV 的 BGR 调色板的先决条件

要有效地进行图像处理和计算机视觉项目,需要对 Python 编程有扎实的掌握,并了解 OpenCV 库。这是实现棘手操作和开发计算机视觉解决方案的必备技能之一。除了所有编程技能外,还需要一些特定的系统要求,以确保满足 OpenCV 项目所用应用程序的要求。

为了高效运行 OpenCV,系统应满足以下配置:

  1. 操作系统: OpenCV 在 Windows、macOS 和 Linux 上运行效率很高,因此确认您要选择的版本必须得到您操作系统的支持非常重要。
  2. Python 版本: OpenCV 兼容 Python 3.x 版本,并且支持最新版本,提供了改进的性能和新功能访问。
  3. 内存(RAM): 至少需要 4 GB 的 RAM 来处理基本的图像处理任务,而推荐使用 8 GB 或更多 RAM 来实时处理高分辨率图像或视频。
  4. 图形处理单元 (GPU): 虽然 OpenCV 可以在 CPU 上运行,但利用具有强大 GPU 的系统,例如支持 CUDA 的 NVIDIA GPU,可以显著加快处理速度,特别是对于涉及深度学习模型或大型数据集的高级任务。
  5. 存储: 需要足够的磁盘空间,因为图像和视频文件可能非常大。建议至少有 20 GB 的可用空间用于使用 OpenCV 库、额外的 Python 包和项目文件。

安装

要安装 opencv 库,以管理员身份打开命令提示符 cmd,并按照步骤安装该库。

在命令提示符中运行以下命令:

安装库后,导入一些库以进行实现。

代码

此代码会生成一个 400x400 像素的三通道空白黑色图像,用于在 Python 中表示 RGB 图像。一个名为 img 的对象被赋值为该图像,因此可以轻松检索并用于进一步的修改。另一个名为“image”的窗口被创建,用作显示生成图像的可视化区域。这是一个简单的应用程序设置,更像是一个基础,在此基础上开始图像处理操作,因为此模型具有简单的背景,图像可以在上面绘制各种形状、添加文本或进行转换。

代码

这是一个非常原始的 Python 函数,它不执行任何特定操作。它接受输入参数,但不对其执行任何操作。因此,它是一个“占位符”类型的函数。这种占位符函数在 OpenCV 中常用于图形用户界面编程。此类代码通常使用交互式 GUI 元素,包括滑块。

滑块是包含滑块的 GUI 元素。它们提供了一种用户动态更改某物值的方法。在 OpenCV 中,每次移动滑块的位置都可以调用一个回调函数,该函数可以执行某些操作。如果未提供回调函数,OpenCV 会默认使用此“无操作”函数,该函数在不执行任何操作的情况下填充回调槽,从而防止错误发生。这在 GUI 框架设置期间特别有用,因为它使用户能够轻松地稍后进行自定义——用户可以选择在扩展应用程序功能时,将此占位符替换为实际函数。

代码

此代码片段在 OpenCV 中创建了三个交互式滑块(或“滑轨”) ,以便用户可以更改窗口中图像的蓝色、绿色和红色颜色通道。因此,滑块被放置在一个命名窗口中,并创建了一个用户可见的窗口,以便用户可以实时地可视化颜色修改。

对于 BGR 的每个通道都有一个滑块,初始值为零,最大值为 255,这是每个颜色通道可能达到的最高值。使用滑块,每个用户可以分别设置每个颜色通道的强度,从而在显示的图像上获得所需的色彩平衡和增强。这种配置经常用于图像处理中对颜色进行测试和操作。为了直观地展示对每个通道的所有更改如何影响图像的整体外观,通常会使用这种设置。

代码

现在,启动一个 while 循环。

代码

说明

此代码块捕获先前在名为“image”的窗口中创建的名为“blue”、“green”和“red”的滑块的当前调整值。这些值被捕获并分别赋给三个变量:blue、green 和 red,表示每个颜色通道的当前强度值。

通过捕获上述值,代码允许对正在显示的图像进行动态的运行时颜色更改。现在,修改蓝色、绿色和红色通道滑块的交互性使得颜色构成和平衡控制对最终用户来说是即时且直接的。这对于需要实时颜色调整且必须获得即时反馈的应用最有帮助,因为这会影响每个单独通道变化下产生的整体图像。也就是说,有了实时反馈,通过移动滑块就可以轻松地获得精确的色彩平衡。

为了更新窗口中图像的平衡,将值赋给变量 blue、green 和 red,然后使用 cv2 库中的 imshow() 函数来显示图像。

代码

说明

上面的代码段用于显示调色板,如果用户输入 q,则退出窗口,并销毁所有窗口。

完整代码如下:

代码

输出

Python - OpenCV BGR Color Palette with Trackbars

说明

输出显示了蓝色、绿色和颜色的三个颜色条,如果我们改变滑块的范围,屏幕的颜色就会改变。