OpenCV 图像处理入门:从读取、显示到颜色空间转换

chatgpt赋能python:**Python图像处理教程:使用Python进行图像处理** 本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。 阅读详情

【精选优质专栏推荐】


每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。

在这里插入图片描述

前言

在处理图像时,一些最基本的操作包括从磁盘读取图像、显示图像、访问像素值,以及将图像从一种颜色空间转换到另一种颜色空间,这些都是掌握图像处理的基础。

本教程将解释这些基本操作,并首先描述数字图像是如何通过空间坐标和像素强度值来构成的。

在本教程中,你将熟悉在处理图像时使用 OpenCV 的最基础操作。

完成本教程后,你将学会:

  • 数字图像如何通过空间坐标和像素强度值来构成。

  • 如何在 OpenCV 中读取和显示图像。

  • 如何访问图像的像素值。

  • 如何将图像从一种颜色空间转换为另一种颜色空间。

本教程分为三部分:

  1. 图像的构成

  2. 在 OpenCV 中读取和显示图像

  3. 颜色空间之间的转换

图像的构成

数字图像由像素组成,每个像素由其在图像空间内的空间坐标和强度值(灰度值)描述。

本质上,一幅图像可以用二维函数 I(x, y) 描述,其中 x 和 y 表示空间坐标,I(x, y) 的值表示该像素的强度。在数字图像中,空间坐标和强度值都是有限的离散量。

我们刚描述的图像类型称为灰度图像,因为它只包含单通道,每个像素仅包含强度信息。像素强度通常用整数表示,范围为 [0, 255],即每个像素有 256 个离散值。

另一方面,RGB 图像由三个通道组成,分别为红色(Red)、绿色(Green)和蓝色(Blue)。

RGB 颜色模型不是唯一的颜色模型,但它在计算机视觉应用中可能是最常用的。它是一种加色模型,通过混合不同颜色光源的光谱来创建颜色。

由于 RGB 图像由三个通道组成,我们需要三个函数来描述它:IR(x, y)、IG(x, y)、IB(x, y),分别对应红、绿、蓝三个通道。因此,在 RGB 图像中,每个像素值由三个强度值组成的三元组表示。

在 OpenCV 中读取和显示图像

首先从 Python 的 OpenCV 库中导入 imread 方法:

from cv2 import imread

然后读取一幅 RGB 图像。例如,我下载了一张图片,并将其保存为 ‘Images/Dog.jpg’。

img = imread('Images/Dog.jpg')

imread 方法返回一个 NumPy 数组 img,其中包含图像像素值。可以检查数组的数据类型和维度:

print('Datatype:', img.dtype, '\nDimensions:', img.shape)

输出结果示例:

Datatype: uint8
Dimensions: (4000, 6000, 3)

该信息说明数组的数据类型为 uint8(8 位无符号整数),每个通道的像素值在 0 到 255 之间,正好符合前面介绍的图像构成。数组的维度为 4000 × 6000 × 3,分别对应图像的行数、列数和通道数。

图像是一个三维 NumPy 数组,因此可以使用 NumPy 语法对其进行操作。

例如,访问图像左上角的第一个像素(Python 中数组索引从 0 开始,对应坐标为 (0, 0)):

print(img[0, 0])

输出示例:

[173 186 232]

如预期,每个像素包含三个值,分别对应 RGB 三个通道。下一节将解释这三个值分别对应哪个通道。

注意:如果 imread 方法未能加载图像(例如文件不存在或路径无效),它不会报错,而是返回 None 类型对象。因此,在使用 img 之前可进行如下检查:

if img is not None:
    ...

接下来,我们使用 Matplotlib 包以及 OpenCV 的 imshow 方法显示图像。imshow 方法的第一个参数是窗口名称,第二个参数是要显示的图像。显示图像后,可以调用 OpenCV 的 waitKey 方法等待键盘事件,单位为毫秒。如果输入值为 0,则无限等待,直到检测到键盘事件。

使用 Matplotlib 显示图像示例:

import matplotlib.pyplot as plt

plt.imshow(img)
plt.title('Displaying image using Matplotlib')
plt.show()

在这里插入图片描述

使用 OpenCV:

from cv2 import imshow, waitKey

imshow('Displaying image using OpenCV', img) 
waitKey(0)

在这里插入图片描述

如果你对 Matplotlib 显示的输出感到惊讶,并想知道这是怎么发生的,其原因在于 OpenCV 读取和显示图像时使用的是 BGR 而不是 RGB 顺序。

OpenCV 的早期开发者选择 BGR 颜色格式(而非 RGB),是因为当时 BGR 颜色格式在软件提供商和摄像头厂商中非常流行。
——《Mastering OpenCV 4 with Python, 2019》

而 Matplotlib 使用的是 RGB 颜色格式,因此在显示之前,需要先将 BGR 图像转换为 RGB 格式,才能正确显示。

使用 OpenCV,你也可以将 NumPy 数组写入图像文件,例如:

from cv2 import imwrite

imwrite("output.jpg", img)

使用 imwrite() 函数写入图像时,需要确保 NumPy 数组符合 OpenCV 期望的格式,即一个三维的 uint8 数组,形状为 行 × 列 × 通道,通道顺序为 BGR。

颜色空间转换

将图像从一种颜色空间转换到另一种颜色空间,可以使用 OpenCV 的 cvtColor 方法。该方法需要传入源图像和颜色空间转换代码。

例如,在 BGR 和 RGB 之间转换,可以使用以下代码:

from cv2 import cvtColor, COLOR_BGR2RGB

img_rgb = cvtColor(img, COLOR_BGR2RGB)

如果再次使用 Matplotlib 显示图像,现在它将正确显示:

plt.imshow(img_rgb)
plt.show()

在这里插入图片描述

如果我们想访问新转换为 RGB 图像的左上角第一个像素的值:

print(img_rgb[0, 0])

输出示例:

[232 186 173]

将其与之前 BGR 图像的值 [173 186 232] 进行比较,可以发现第一个值和第三个值交换了位置。这说明,像素值的顺序对应于图像通道的顺序。

使用 cvtColor 方法不仅可以实现 BGR 到 RGB 的转换。实际上,还有很多颜色空间转换代码可供选择,例如 COLOR_RGB2HSV,可以在 RGB 和 HSV(色调、饱和度、亮度)颜色空间之间进行转换。

另一种常见的转换是从 RGB 转为灰度图像,如前面提到的,输出将是单通道图像。示例代码如下:

from cv2 import COLOR_RGB2GRAY, cvtColor, imshow, waitKey

img_gray = cvtColor(img_rgb, COLOR_RGB2GRAY)

imshow('Grayscale Image', img_gray)
waitKey(0)

在这里插入图片描述

灰度转换已经成功完成,但我们也可以尝试访问左上角第一个像素(坐标 (0, 0))的值:

print(img_gray[0, 0])

输出示例:

198

如预期,仅打印出了一个数字,对应该像素的强度值。

值得注意的是,这并不是将图像转换为灰度图的唯一方法。实际上,如果应用只需要灰度图像而非 RGB 图像,也可以在读取图像时直接以灰度方式读取:

from cv2 import IMREAD_GRAYSCALE, imread, imshow, waitKey

img_gray = imread('Images/Dog.jpg', IMREAD_GRAYSCALE)

imshow('Grayscale Image', img_gray)
waitKey(0)

注意:OpenCV 文档指出,使用 IMREAD_GRAYSCALE 时,如果可用,会利用编码器的内部灰度转换,这可能导致输出与 cvtColor() 不完全一致。

imread 方法还支持其他几个标志值,其中两个是 IMREAD_COLOR 和 IMREAD_UNCHANGED。

  • IMREAD_COLOR 是默认选项,会将图像转换为 BGR 彩色图像,并忽略任何透明度信息。

  • IMREAD_UNCHANGED 会读取可能包含 alpha 通道的图像。

总结

在本教程中,你已经熟悉了处理图像时使用 OpenCV 的最基础操作。

具体来说,你学会了:

  1. 数字图像如何通过空间坐标和像素强度值来构成。

  2. 如何在 OpenCV 中读取和显示图像。

  3. 如何访问图像的像素值。

  4. 如何将图像从一种颜色空间转换为另一种颜色空间。

opencv基础篇 ——(二)颜色空间转换 颜色空间是描述图像中颜色的数学模型。不同的颜色空间使用不同的方式来表示颜色,每种颜色空间都有其特定的优点和用途。RGB 是最常见的颜色空间之一,它使用红色(Red)、绿色(Green)、蓝色(Blue)三个颜色通道来描述一个颜色。在 RGB 空间中,每个像素由这三个通道的强度值组成,通常范围在 0 到 255 之间。RGB 颜色空间适用于大多数彩色显示设备,如电脑显示器、数字相机等。BGR 是 RGB 的变种,其中颜色通道的顺序颠倒为蓝色(Blue)、绿色(Green)、红色(Red)。 阅读详情

相关推荐

关于OpenCV 从基础到深入的详解——五、图像的颜色空间转换

RGB 颜色空间原理:RGB(Red、Green、Blue)颜色空间是基于光的三原色原理构建的。它通过红、绿、蓝三种颜色的不同强度混合来表示各种颜色。在数字图像中,每个像素的颜色由三个通道的值来确定,每个通道的值通常表示该颜色的强度,范围一般是 0 - 255(对于 8 位图像)。例如,(255, 0, 0) 表示纯红色,(0, 255, 0) 表示纯绿色,(0, 0, 255) 表示纯蓝色,而 (255, 255, 255) 则表示白色,(0, 0, 0) 表示黑色。特点。

weixin_43084893的博客 899

零基础学OpenCV:5个必知图像处理技巧

作为一个刚入门的小白,我记录下学习过程中最基础的5个图像处理技巧,分享给同样想入门的同学。处理完图片后,我们通常需要保存结果。只需要指定保存路径和格式参数,就能把处理好的图片存到本地,方便后续使用或分享。通过这5个基础技巧的学习,我对OpenCV有了初步认识,也体会到了图像处理的乐趣。如果把这些功能组合起来,还能实现更有趣的效果,比如先缩放图片,再加滤镜,最后旋转保存。我在这里写代码时发现,它的编辑器很流畅,运行结果能实时看到,特别适合新手练习。处理完的图片还能一键部署分享,不用自己搭建环境,确实方便。

SnowflakeJaguar14的博客 415

基于Python+OpenCV颜色空间的转换和分析

一、项目背景与意义在数字图像处理中,颜色空间的转换是一个重要的预处理步骤,它影响着后续图像处理的效果。不同的颜色空间适用于不同的图像处理任务,如颜色分割、目标识别、颜色校正等。OpenCV是一个功能强大的计算机视觉库,提供了多种颜色空间之间的转换函数。本项目旨在通过Python和OpenCV库,对不同的颜色空间进行转换和分析,以探究它们在不同图像处理任务中的优缺点和应用场景。二、技术框架与工具。

2301_79810943的博客 771

Python图像处理:OpenCV入门教程

所谓图像处理指利用计算机技术对图像进行处理和增强的过程。它是计算机视觉的组成部分,可应用于多个领域。OpenCV是一种计算机视觉开源库。它由英特尔公司研发,可支持多种编程语言,如C++、Python 和 Java 等。主要用于开发实时的计算机视觉应用程序。它具有强大的图像处理功能,支持多种图像格式和数学运算,使开发人员可以很容易地使用和定制这个库。另外,它还具有良好的跨平台性能,能够在Windows、Linux 和 macOS 等多个操作系统上运行。人脸识别是一种基于图像和视频的自动识别技术。

BXA 9616

OpenCV实现RGB颜色空间和HSI颜色空间的相互转换

OpenCV实现RGB颜色空间和HSI颜色空间的相互转换

ugfdfgg的博客 1673

OpenCV 入门教程:颜色空间转换

在图像处理和计算机视觉领域,颜色空间转换是一项重要的任务。不同的颜色空间具有不同的表示方式,可以用于不同的图像处理和分析任务。 OpenCV 提供了丰富的功能来进行颜色空间的转换和处理。本文将以颜色空间转换为中心,为你介绍使用 OpenCV 进行颜色空间转换的基本步骤和实例。

小蓝枣的博客 2220

qt结合opencv图像处理————颜色空间转换

图像处理中的颜色空间转换是一个非常重要的概念。不同的应用场景可能需要使用不同的颜色空间,因此需要进行颜色空间的转换。常见的颜色空间包括:RGB(红绿蓝)颜色空间:这是最常见的颜色空间,大多数显示设备和图像格式都使用这种颜色空间。CMYK(青、品红、黄、黑)颜色空间:主要用于印刷和图像输出设备。HSV(色调、饱和度、明度)颜色空间:这种颜色空间更接近人类的感知,可以更直观地调整颜色。LAB(亮度、色度a、色度b)颜色空间:这种颜色空间更接近人眼的感知,可以更好地表示颜色的差异。

m0_46704925的博客 1175

基于C++与OpenCV的RGB到HSV颜色空间转换实践指南

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,由英特尔公司于1999年启动,并于2008年公开源代码。OpenCV项目包含了超过2500个优化的算法,这些算法可以处理图像的点处理、滤波、几何变换、特征提取、摄像机标定、三维重建、机器学习等多种任务。其强大的跨平台能力以及高效的执行性能,使它成为了全世界计算机视觉研究和应用领域的首选。

weixin_42527665的博客 805

C++ opencv操作入门教程

C++ opencv操作入门教程

qq_46017342的博客 8052

基于OpenCV与MFC实现图片颜色空间转换

用户自定义参数是实时颜色转换预览功能中不可或缺的一部分。用户可能需要调整亮度、对比度、饱和度等参数。这些参数需要实时反馈到颜色转换算法中,以便用户即时查看调整效果。效果反馈通常通过滑动条、旋钮或数字输入框来实现。每个参数的改变都应当实时反映到预览窗口中,用户应能直观地看到调整后的结果。这样,用户能够通过试错的方式找到自己满意的效果。

weixin_35972981的博客 1146

OpenCV-Python图像转换至PyQt显示中的变形与花屏问题研究

颜色模型是用于表示色彩的一套数学方程,它允许我们以数字方式对色彩进行定义和处理。最常见的颜色模型包括RGB和CMYK。RGB模型广泛应用于显示器、相机和其他电子设备,它通过红(Red)、绿(Green)、蓝(Blue)三种基本颜色的光的混合来生成其他颜色。每个颜色通道的强度通常用8位来表示,从而提供了256个不同的强度等级。在计算机图形学中,颜色空间定义了颜色的表示方式。RGB颜色空间是按照红、绿、蓝的顺序排列颜色通道的。而BGR颜色空间则是将蓝色和红色通道的顺序对调,变成蓝、绿、红。

weixin_30481539的博客 1032

opencv图像读取显示、颜色空间转换与保存

opencv图像读取显示、颜色空间转换与保存

tjk12345的博客 320

飞控算法-姿态解算之互补滤波

飞控乱入之姿态解算 姿态解算是通过读取各个传感器的数据进行融合最终得到当前飞行器的姿态,姿态通常用Euler角(Roll-Pitch-Yaw)来表示 姿态解算框架 姿态解算的数据源可来自于陀螺仪或加速度计,他们分别都可以得到当前姿态,但实际上他们都有各自的传感器性能的优缺点,需要取长补短,进行数据融合才能得到真实的姿态,这种方法简称 互补滤波 算法 传感器特性 互补滤波 姿态解...

GoolyOh的专栏 1万+

Opencv颜色空间转换

1.基本原理 颜色空间,是为了方便对色彩进行说明而建立的彩色模型。在数字图像处理中,最常用的颜色空间是RGB(红绿蓝)模型,常用于颜色显示和图像处理,此外还有HSI(色调,饱和度,亮度)空间和灰度空间。 1)RGB空间 RGB空间基于笛卡尔坐标系,是用一个单位长度的立方体来表示颜色的,如图所示: 图中RGB原色值位于立方体三个顶点上,二次色青色,品红色和黄色位于另外三个顶点上,白色位于与原点相对的顶点上。 ...

sunshineking9的博客 1224

PCIe ATS介绍

主机侧使用IOMMU完成设备地址到物理memory地址的转换,以及设备访问权限的检查。但如果所有PCIe设备都在进行DMA操作,则TA(Translation Agent)和ATPT(Address Translation and Protection Table)则会成为瓶颈,从而影响系统的latency。

maxwell2ic的博客 6023

stm32教程之三重ADC交错采样

ps:本文基于stm32F407ZGT6单片机 stm32F4单片机单通道采集的最大采样率为2.4M,所以有时会难以满足较高频率的采样,于是查阅芯片手册,发现stm32F4支持多重ADC采集,利用每个通道的转换时间,错位采样,从而提高采样率,最大把采样率开到2.4*3=7.2M. (去年初学ADC时研究的,基于cube和HAL库的三重ADC交错采样参考资料不多,我也是研究了一段时间,写下这篇博客希望可以帮助到更多人。) 示意图如下: 以下是官方例子的说明, In this ex...

weixin_52178036的博客 8877

【OpenCV3】颜色空间转换——cv::cvtColor()详解

cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致。 具体调用形式如下: void cv::cvtColor( cv::InputArray src, // 输入序列 cv::OutputArray dst, /...

一行一生 5962

从零构建AI辅助逆向分析环境:JADX-MCP与LLM的实战集成指南

本文详细介绍了如何从零构建AI辅助逆向分析环境,通过集成JADX-MCP与LLM技术,提升Android应用逆向工程效率。文章涵盖环境搭建、插件安装、MCP服务器配置及实战案例分析,帮助开发者快速掌握AI在代码理解、漏洞挖掘和自动化文档生成中的应用。

weixin_27875131的博客 839

opencv颜色空间转换

#include #include #include #include int main() { // 图像源读取及判断     cv::Mat srcImage = cv::imread("..\\images\\lakeWater.jpg"); if (!srcImage.data)           return -1;     cv::imshow("srcI

hb707934728的博客 2611

Android 12.0 framework系统修改安兔兔等显示的屏幕尺寸大小功能实现

在12.0的系统rom定制化开发中,在使用第三方app检测系统的一些信息中,比如安兔兔 设备信息等检测app中,有时候显示的屏幕尺寸大小和 产品规格书等信息不同,稍微有些差异,所以就需要看下系统framework层中,相关的设备信息是怎么读出来的,然后做些调整 接下来就来分析相关功能

安卓兼职framework和app工程师的博客 478

【Ubuntu】RK3576 Linux 6.10 Ubuntu 22.04 系统中 HUSB311 Type-C 转 DP 显示输出与 Device/OTG 模式切换配置详解

本文详细介绍了在Rockchip RK3576开发板(Linux Kernel 6.10+Ubuntu 22.04)上配置HUSB311 Type-C控制器的设备树实现方案。主要内容包括:1)硬件连接与模块组成;2)设备树完整配置,涵盖Type-C供电、USB OTG/Host模式、DP显示输出等关键功能;3)软件配置步骤与常见问题排查方法。该方案实现了Type-C接口的DisplayPort AltMode显示输出、USB Device/Host模式自动切换等功能,为嵌入式系统Type-C接口开发提供参考

qq_34478161的博客 808

opencv图像处理之改变颜色空间

颜色空间介绍 1.GRAY 单通道图片,用0-255来表示每个像素的颜色。 2.RGB/BGR 人眼 RGB三原色起源于上世纪初1809年Thomas Young提出视觉的三原色学说,随后Helmholtz在1824年也提出了三原色学说:即:视网膜存在三种视锥细胞,分别含有对红、绿、蓝三种光线敏感的视色素,当一定波长的光线作用于视网膜时,以一定的比例使三种视锥细胞分别产生不同程度的兴奋,这样的...

方寸想法,编码宇宙 1597

当SLAM遇上FPGA:打造一个会“硬件加速”的激光雷达SLAM系统

点云数据的运动畸变校正特征点提取与匹配、以及ICP迭代最近点配准。在传统方案中,我们通常用ARM核完成所有计算。但点云配准中的最近邻搜索(KD-Tree)需要大量分支判断,CPU处理起来效率很低;而ICP中的矩阵分解(SVD)虽然计算量大,但非常适合并行化。ZYNQ的特殊之处在于它把ARM(PS端)和FPGA(PL端)集成在同一颗芯片上。ARM擅长跑操作系统、处理复杂逻辑和调度,FPGA擅长做高吞吐量的并行计算。两者之间通过AXI总线高速互联,数据交换延迟只有几十个时钟周期。

QQ_778132974的博客 376

opencv图像处理(4)|颜色空间转换

主要参考内容和。

dowrongagain的博客 1331

【ComfyUI】QwenImageEdit OOTD角色与姿态匹配换装

本文介绍了一个基于Qwen Edit OOTD 2.0的ComfyUI工作流,能够实现角色与姿态匹配的智能穿搭生成。该工作流通过整合模型推理、姿态识别、图像拼接和渲染等节点,完成从角色图、姿态图到成品穿搭图的完整生成流程。核心采用Qwen Image系列模型进行图像理解和编辑,配合ControlNet进行姿态引导。用户只需提供角色图和姿态参考图,系统即可自动完成姿态解析、语义编码、采样生成等步骤,输出与输入姿态一致的穿搭图像。该方案适用于虚拟角色展示、电商试穿等场景,能保持角色特征一致的同时灵活变换姿态,显

Mr数据杨 1590

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Opencv图像读取,显示,保存,类型转换

图像基本操作 环境配置地址: Anaconda:https://www.anaconda.com/download/ Python_whl:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 图像基本知识 图像:任何带有信息的二维函数都可以被看作一幅图像。(x,y)是定义域为平面的空间坐标,坐标点(x,y)上的函数值(幅值)称为该点图像...

陨星落云的博客 1016

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 使用 OpenCV 读取与显示视频帧:从摄像头到本地文件的完整指南
下一篇: 从零到精通 OpenCV:计算机视觉与机器学习全面指南
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄4年 3万+粉丝 1906原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值