完整教程:Opencv(一): 用Opencv了解图像

news/2025/11/22 18:09:43/文章来源:https://www.cnblogs.com/ljbguanli/p/19258277

完整教程:Opencv(一): 用Opencv了解图像

文章目录

  • 思维导图
  • 前言
    • 一、图像的最小单元
      • 1. 像素的本质
      • 2. 像素的存储形式
    • 二、图像的颜色体系
      • 1. RGB三通道的定义
      • 2. 通道数值的物理意义
      • 3. 灰度图与单通道
    • 三、存储图像的核心
      • 1. 不同类型图像的数组维度
      • 2. OpenCV的BGR通道顺序
    • 四:实验现象
    • 五.总结

思维导图

在这里插入图片描述

前言

大家每天浏览的图片、视频,在计算机眼中并非“画面”,而是一串有规律的数字和数组。本文从底层原理到实操细节,逐点拆解计算机处理图像的核心逻辑,帮你建立“数字视角”理解图像。

一、图像的最小单元

像素是图像的基本单元,每个像素存储着图像的颜色、亮度和其他特征,一张
由很多个像素组成的。就是图片
要理解计算机如何看图像,必须先吃透像素的3个核心属性:

1. 像素的本质

像素(Pixel = Picture Element)是图像的基本构成单元,每个像素都承担着“存储信息”的能力,具体包含两类关键数据:

举个直观例子:一张1920×1080分辨率的图片,意味着它横向有1920个像素,纵向有1080个像素,总像素数为1920×1080=2,073,600个——每个像素都有自己的颜色和位置,共同组成我们看到的画面。

2. 像素的存储形式

计算机只能识别二进制(0和1),因此像素的信息会被转化为二进制数字存储,但我们日常查看时会以十进制或十六进制显示,核心规则如下:

  • 单通道(如灰度图):每个像素用8位二进制表示,对应十进制的0-255,共256种状态。其中,0代表纯黑色,255代表纯白色,1-254对应不同深浅的灰色(数值越大,颜色越亮);
  • 多通道(如RGB彩色图):每个像素由多个通道的数值组合而成,每个通道同样遵循0-255的范围,组合后可表示的颜色总数为255×255×255≈1678万种,足以覆盖人眼能识别的绝大多数颜色。

比如“纯红色”像素,在RGB模型中对应的十进制数值是(255,0,0),转化为二进制就是(11111111, 00000000, 00000000),这就是计算机存储该像素的“原始语言”。

二、图像的颜色体系

日常生活中99%的彩色图像都基于RGB颜色模型,它是计算机处理彩色信息的“通用标准”,应该从“通道定义”“混合规则”“特殊注意事项”三个维度理解:

注意:在OpenCV中像素值的存储顺序是 BGR而不是RGB。 计算机处理图像本质上就是对三维数组中的像素值进行操作。

1. RGB三通道的定义

日常生活中常见的图像都是RGB三色图,R代表红色、G代表绿色、B代表蓝色。
RGB图是由很多个像素点构成的,每一个像素点都是由R、G、B三个颜色混合而
成的,几乎所有的颜色都可以借助这三种颜色合成。

而在计算机中,RGB三种颜色被称为RGB三通道,且每个通道的取值都是0-255,
根据这三个通道存储的像素值来对应不同的颜色。

RGB分别对应三种基础色光:Red(红色)、Green(绿色)、Blue(蓝色),这三种色光被称为“三原色光”,其核心特性是:

  • 独立性:每个通道的数值独立控制对应色光的强度,互不干扰;
  • 叠加性:三种色光按不同强度叠加,可生成几乎所有可见颜色(这与颜料混合的“减法原理”不同,RGB是“加法混色”)。

例如:

  • 红色(255,0,0)+ 绿色(0,255,0)= 黄色(255,255,0);
  • 红色(255,0,0)+ 蓝色(0,0,255)= 品红色(255,0,255);
  • 绿色(0,255,0)+ 蓝色(0,0,255)= 青色(0,255,255);
  • 红+绿+蓝(255,255,255)= 白色,(0,0,0)= 黑色。

2. 通道数值的物理意义

每个RGB通道的数值范围是0-255,该范围并非随意设定,而是由“8位二进制”的存储能力决定(2^8=256,即0到255共256个等级),数值大小直接对应色光的“亮度”:

我们在“画图”软件或设计工具中看到的“十六进制颜色码”(如#FF0000),本质就是RGB数值的简写:FF对应十进制255(红色通道),00对应0(绿色通道),00对应0(蓝色通道),即纯红色。

3. 灰度图与单通道

灰度图是RGB图像的“简化形式”,它仅保留“亮度信息”,舍弃“颜色信息”,对应计算机中的“单通道”存储:

  • 存储维度:仅用二维数组表示,维度为“图像高度(行数)× 图像宽度(列数)”;
  • 数值意义:每个位置的数值(0-255)直接代表该像素的亮度,0=纯黑,255=纯白,中间数值对应不同灰度(如128=中灰色);
  • 应用场景:文字识别、边缘检测等场景中,灰度图能减少计算量(无需处理3个通道),同时保留关键的轮廓信息。

三、存储图像的核心

“可视化的图片文件”,但在计算机内存中,它的本质是就是很多人误以为图像多维数组——所有图像处理(如裁剪、调色、滤波),最终都是对数组中数值的修改。

1. 不同类型图像的数组维度

大家以“7×7像素”的图像(横向7列,纵向7行)为例,拆解不同图像的数组结构:

图像类型数组维度维度含义示例(数组形状)每个元素的意义
灰度图二维数组高度(行)× 宽度(列)(7, 7)单个0-255的亮度值
RGB彩色图三维数组高度(行)× 宽度(列)× 3(RGB通道)(7, 7, 3)长度为3的列表,分别对应R、G、B值(如[255,0,0])

举个具体例子:一张7×7的RGB彩色图,数组中“第2行第3列”的元素是[255,0,0],意味着该位置的像素是纯红色——其中“第2行第3列”是像素的位置,[255,0,0]是像素的颜色信息。

2. OpenCV的BGR通道顺序

在实际编程中,有一个极易踩坑的细节:OpenCV库存储RGB图像时,通道顺序是BGR(蓝→绿→红),而非常规的RGB

这意味着:

OpenCV的历史设计,但作为初学者必须牢记,否则会导致后续实验或项目中颜色处理异常。就是这个细节的根源

四:实验现象

注意:输出的名字不要写重复的,不然会覆盖之前的图像
代码核心逻辑解析

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 创建一个空白的 700x700 彩色图像
image = np.zeros((700, 700, 3), dtype=np.uint8)
# 绘制黑色边框,每个 100x100 像素的块周围
block_size = 100
for i in range(0, 700, block_size):
for j in range(0, 700, block_size):
top_left = (j, i)
bottom_right = (j + block_size - 1, i + block_size - 1)
# 绘制 X 型图案,将两个对角线方向的块填充为红色
if ((i // block_size == j // block_size) or (i // block_size + j // block_size == 6)) and (i != 0) and (i != 600):
cv2.rectangle(image, top_left, bottom_right, (0, 0, 255), -1)  # 使用 -1 填充矩形为红色
else:
cv2.rectangle(image, top_left, bottom_right, (255, 255, 255), 2)  # 绘制其他块的白色边框
# 将 BGR 通道顺序转换为 RGB 顺序,用于 Matplotlib 显示
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 在 Jupyter Notebook 中显示图像
plt.imshow(image_rgb)
plt.title('Original Image')
plt.axis('off')  # 不显示坐标轴
plt.show()
# 拆分彩色通道
b, g, r = cv2.split(image)
# 创建空白图像,用于每个通道
blue_channel = np.zeros((700, 700, 3), dtype=np.uint8)
green_channel = np.zeros((700, 700, 3), dtype=np.uint8)
red_channel = np.zeros((700, 700, 3), dtype=np.uint8)
# 分配颜色通道数据
blue_channel[:, :, 0] = b
green_channel[:, :, 1] = g
red_channel[:, :, 2] = r
# 将 BGR 通道顺序转换为 RGB 顺序,用于 Matplotlib 显示
blue_channel_rgb = cv2.cvtColor(blue_channel, cv2.COLOR_BGR2RGB)
green_channel_rgb = cv2.cvtColor(green_channel, cv2.COLOR_BGR2RGB)
red_channel_rgb = cv2.cvtColor(red_channel, cv2.COLOR_BGR2RGB)
# 在 Jupyter Notebook 中显示拆分的颜色通道
plt.subplot(131)
plt.imshow(blue_channel_rgb)
plt.title('Blue Channel')
plt.axis('off')
plt.subplot(132)
plt.imshow(green_channel_rgb)
plt.title('Green Channel')
plt.axis('off')
plt.subplot(133)
plt.imshow(red_channel_rgb)
plt.title('Red Channel')
plt.axis('off')
plt.tight_layout()
plt.show()

输出结果为:
请添加图片描述
请添加图片描述

五.总结

本文从图像的基础构成到计算机存储逻辑,再到实验实操,拆解了计算机 “看” 图像的核心逻辑:像素是图像的最小单元,利用 0-255 的数值存储颜色与亮度;RGB 三通道以加法混色原理生成彩色,灰度图则用单通道简化存储亮度;而计算机本质是将图像以多维数组形式处理,OpenCV 的 BGR 通道顺序是实操中需重点注意的细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker compose插件安装

参考链接 在 Ubuntu 22.04 中,我们需要从官方 Docker 仓库安装 Docker Compose 插件。首先,让我们确保我们具备必要的先决条件: sudo apt-get install -y ca-certificates curl gnupg现在,添加 Docker 的官方 GPG …

完整教程:树与二叉树的奥秘全解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

C#扩展成员全面解析:从方法到属性的演进

本文详细介绍了C#中扩展成员的发展历程,从传统的扩展方法到C# 14中的扩展属性和索引器,通过具体代码示例展示如何更优雅地扩展现有类型功能。C#扩展成员:你需要知道的一切 扩展方法在C#中已经存在很长时间。它们允许…

多机elasticsearch集群部署,超详细教程

假设我们有三台机器,172.24.52.209,172.24.52.210,172.24.52.211。 用户名xjw 三台机器都创建文件夹/home/xjw/docker/learning/elasticsearch,和/home/xjw/docker/learning/kibana,learning为项目名 mkdir -p /h…

DeepSeek 提取 交易所网站核心500词汇(名词与术语)

DeepSeek 提取 交易所网站核心500词汇(名词与术语)交易所网站核心词汇扩充(名词与术语) 1. 市场结构与微观结构 英文术语中文翻译Auction 竞价Opening Auction 开市竞价Volatility Control Mechanism 市场波动调节…

[251122 678mAh] 模拟赛没破防有感 3.0

/hanx我写完 T4 了。 编译运行。 好的,卡住了。 应该是 RE 了。 ?为什么是在输出完答案之后卡住。 (想起了不好的回忆) 诶,别! 别别别别别! 就剩一个小时了别给我干死机了,这次可不是在线提交啊机子还原一下整…

白银市一对一培训机构推荐,2026年最新课外辅导全面测评口碑排名榜

在白银这座教育资源蓬勃发展的城市,从白银区繁华的北京路商圈到平川区快速崛起的会展中心周边,从靖远县文教氛围浓厚的学府街区到会宁县底蕴深厚的教育板块,从景泰县充满活力的新城商圈到皋兰县快速成长的教育园区,…

天水市一对一培训机构推荐,2026最新课外辅导机构口碑深度测评排名榜

在天水市,无论是秦州、麦积两区的繁华都市圈,还是秦安、甘谷、武山、清水、张家川回族自治县等地的莘莘学子,家长们都怀揣着同样的期望:让孩子在接受优质校内教育的同时,能通过课外辅导弥补短板、拔高优势,在求学…

CSAPP bomblab

规则:对于每个\(phase\),你都需要输入一个字符串,使得\(explode\_bomb\)函数不被运行 在bomb目录下使用objdump -d bomb > bomb.s得到反汇编文件\(bomb.s\) \(shell\) 中使用 gdb bomb进入\(gdb\)调试phase_1000…

history of linux

Linux 是一个开源的、跨平台的操作系统,其历史可以追溯到 1991 年。以下是 Linux 的主要发展历史阶段:1. 前身:Minix(1987)开发者:Andrew S. Tanenbaum特点:一个小型、可移植的操作系统内核,主要用于教学。与 …

history linux

当你在 Linux 系统中运行 history 命令时,它会显示你之前执行过的命令历史记录。这个命令是 Shell(如 Bash)内置的,用于跟踪用户在终端中执行过的命令。1. 基本用法history功能:显示当前终端中执行过的命令历史记…

Spring BeanFactoryPostProcessor 接口

[[Spring IOC 源码学习总笔记]] BeanFactoryPostProcessor是 Spring 框架提供的一个扩展点接口,它允许开发者在 Spring 在BeanFactory 加载了所有bean定义,但尚未实例化任何bean 之后,对底层的 BeanDefinition 和 B…

嘉峪关市一对一培训机构推荐,2026年最新课外补习辅导口碑排名

在雄伟的嘉峪关脚下,教育的热潮正席卷这座城市的每个角落。从雄关区的人民商城周边,到长城区的富强路商圈,再到镜铁区的润泽园社区,随处可见家长们为子女教育奔波的身影。小学生的数学思维拓展与语文阅读能力提升,…

2025 AI 教育培训权威推荐榜深度评测排名

2025 AI 教育培训权威推荐榜深度评测排名 痛点深度剖析 我们团队在实践中发现,当前 AI 教育培训领域存在着诸多核心技术挑战。在教学内容方面,AI 技术发展迅猛,知识更新换代极快,很多培训机构的课程内容难以跟上技…

详细介绍:第七篇:匹配篇 | 怎么像做产品一样,为每个岗位“定制”你的简历?

详细介绍:第七篇:匹配篇 | 怎么像做产品一样,为每个岗位“定制”你的简历?2025-11-22 17:40 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow…

2025年布袋除尘器供应商权威推荐榜单:塑烧板除尘器/耐高温除尘器/防爆除尘器源头厂家精选

在环保要求日益严格的工业制造领域,布袋除尘器作为工业粉尘治理的核心设备,其过滤效率与运行稳定性直接关系到企业的环保合规与生产成本。 工业布袋除尘器通过滤袋过滤、脉冲清灰等技术,能有效捕集工业生产中产生的…

hbuilder是否支持云端部署

HBuilder确实支持云端部署。它提供了云端打包功能,允许开发者将项目上传到云端服务器进行打包,生成Android和iOS平台的安装包。以下是HBuilder云端部署的相关信息: HBuilder云端部署支持云端打包功能:HBuilder支持…

创建矩形并让矩形移动

RGB是颜色值 使⽤⼀个元组 (R, G, B) 表示,每个值范围 0-255 。 ⿊⾊: (0, 0, 0) ⽩⾊: (255, 255, 255) 绿⾊: (0, 255, 0) pygame 坐标系 原点 (0, 0):窗⼝的左上⻆。 X 轴:向右增加 Y 轴:向下增加 按下的按键类…

2025年稳定土搅拌站供应商权威推荐榜单:搅拌站回收/二手稳定土搅拌站/二手混凝土土搅拌站源头厂家精选

在基础设施建设持续发展的背景下,稳定土搅拌站作为道路工程、机场跑道等项目的关键设备,其生产效率、混合均匀性与运行稳定性直接关系到工程质量和施工进度。 稳定土搅拌站通过精确的配料系统与高效的搅拌工艺,将水…

blender能量体全息化效果学习

blender能量体全息化效果学习您提供的这个视频是 **Heavenly** 的经典作品《Growing Girl EX PART 1》。我已经分析了视频中角色变大时的视觉效果,这确实不是简单的“边缘发光”,而是一个组合特效。 这个效果在 Blen…