计算机视觉中图像的基础认知

news2025/2/21 0:04:08

一、图像/视频的基本属性

在计算机视觉中,图像和视频的本质是多维数值矩阵。图像或视频数据的一些基本属性。

  • 宽度(W)高度(H) 定义了图像的像素分辨率,单位通常是像素。例如,一张 1920x1080 的图像有 1920 列(宽度)和 1080 行(高度)。
  • 通道(C) 表示图像的颜色空间,常见的有RGB(红、绿、蓝)三通道彩色图像和单通道灰度图像。

在深度学习框架中,通常使用四维数组 [batch_size, channel, height, width] 或简称 [N, C, H, W] 来表示一批图像的数据格式。而对于视频数据,我们则需要额外增加一个时间维度,即 [batch_size, channel, height, width, time_step],将视频拆解为单帧图像后,复用图像处理逻辑。

RGB三通道彩色图像和单通道灰度图像是数字图像处理中的两种基本类型,它们在色彩表示、数据存储以及应用场景等方面有着显著的区别。理解这两者的差异有助于更好地进行图像处理与分析。

二、理解彩色与灰度图像

2.1 RGB三通道彩色图像

  • 定义:RGB图像由红(Red)、绿(Green)、蓝(Blue)三个颜色通道组成。每个像素的颜色通过这三个通道的不同强度组合来表示。每个通道通常是一个8位的整数,取值范围为0到255。

  • 色彩表示

    • 每个像素点由三个数值(R, G, B)组成,分别对应红色、绿色和蓝色的强度。
    • 这种模式允许表示超过1600万种不同的颜色((256^3)),从而可以精确地再现自然界的大多数颜色。
  • 应用场景:适用于需要高保真度色彩再现的应用场景,如照片编辑、影视制作、游戏开发等。

2.2 单通道灰度图像

  • 定义:灰度图像仅包含一个通道,用来表示亮度信息。每个像素的值代表该点的亮度级别,范围通常是0(黑色)到255(白色),中间值则表示不同深浅的灰色。

  • 色彩表示

    • 因为只有一个通道,所以每个像素只需要一个数值来表示其亮度。
    • 尽管只能显示从黑到白的不同灰度级,但这种简化有时对于特定任务来说已经足够,并且能减少计算复杂度和存储需求。
  • 应用场景:常用于文本识别、边缘检测、医学影像分析等领域,在这些领域中,颜色信息并非关键因素,而对比度和亮度的变化更为重要。

2.3 区别总结

  1. 信息量

    • RGB图像包含了更多的信息(每个像素3个值),能够表达丰富的色彩。
    • 灰度图像每个像素只有1个值,信息量较少,但足以描述图像的亮度分布。
  2. 存储空间

    • RGB图像占用的空间大约是灰度图像的三倍,因为需要存储三个通道的数据。
  3. 处理速度

    • 处理灰度图像通常比处理RGB图像更快,因为它涉及的数据量较小。
  4. 用途

    • RGB图像适合于那些依赖色彩区分的任务,比如物体识别、场景分类等。
    • 灰度图像更适合于那些基于形状或纹理特征的任务,例如文档扫描、X光片分析等。
  5. 转换关系

    • 可以通过一定的算法将RGB图像转换为灰度图像,常用的方法之一是加权平均法,即根据人眼对不同颜色敏感度的不同,给RGB分量赋予不同的权重来计算灰度值。例如,常用的公式为:Gray = 0.299*R + 0.587*G + 0.114*B

三、图像的读取框架

Python 生态中有三大主流图像处理库,各有适用场景:

3.1 Matplotlib

Matplotlib 是一个强大的数据可视化工具,它模仿了 Matlab 的绘图功能。虽然它没有内置的图像处理功能(如旋转、滤波),需手动实现。但可以方便地与 科学计算库NumPy 结合使用来进行图像操作。

from matplotlib import pyplot as plt
import numpy as np
# 读取为 [H, W, C] 的 NumPy 数组(RGB)
img = plt.imread("哪吒.jpeg")        
H, W, C = img.shape
print(img.shape) # 输出(2160, 3840, 3)
# 显示图像
plt.imshow(img)                     
# 保存图像
plt.imsave("哪吒output.jpeg", img)       

在这里插入图片描述

# 提取红色通道并显示为灰度图
img_r = img[:, :, 0]
plt.imshow(img_r, cmap="gray")

在这里插入图片描述

# 下采样(每4像素取1个)
plt.imshow(img[::4, ::4, :])

从尺度上看,图像的像素点少了 4 分之 1
在这里插入图片描述

# 截取左上角 1/4 图像
plt.imshow(img[:H//2, :W//2, :])

在这里插入图片描述

3.2 OpenCV

OpenCV 是计算机视觉领域的金标准库,功能全面,覆盖图像处理、视频分析、实时摄像头捕获,底层为 C++ 实现,Python 通过 cv2 模块调用,支持特征检测、目标跟踪、AR 等高级功能。

通过 pip install opencv-python 即可安装。

import cv2

# 读取图像
# 读取为 [H, W, C] 的 BGR 格式数组
img = cv2.imread(filename="哪吒.jpeg")          
print(img.shape)  # 注意OpenCV默认读取为BGR格式
# 显示图像
cv2.imshow(winname = "Window", mat=img)             
# 等待按键
cv2.waitKey(delay=0)                        
# 关闭窗口
cv2.destroyAllWindows()               

使用 OpenCV 库从摄像头捕获视频流并在窗口中实时显示每一帧,直到用户按下 ESC 键退出


# 视频读取示例
# 创建一个 VideoCapture 对象,参数 0 表示使用第一个可用的摄像头(笔记本内置摄像头或连接的第一个外置摄像头)。如果你有多个摄像头,可以通过改变这个数字来选择不同的设备(如第二个摄像头可以使用 1)。
cap = cv2.VideoCapture(0)
# 开始一个无限循环,用于持续读取和处理视频帧,直到满足特定条件退出循环。
while True:
	# 读取帧
	# cap.read(): 从摄像头读取下一帧。此方法返回两个值:
	# status: 布尔值,表示是否成功读取了帧。如果为 True,则表示成功读取;如果为 False,则表示读取失败。
	# frame: 当前捕获的帧,通常是一个 NumPy 数组,包含图像数据。
    status, frame = cap.read()
    if not status: 
    	break
    # 显示帧
    # 在名为 "demo" 的窗口中显示当前帧 frame
    # 每次调用此函数都会更新窗口中的图像。
    cv2.imshow(winname="demo", mat=frame)
    # 按 ESC 退出
    # 等待按键事件。参数 delay 指定了等待的时间(以毫秒为单位)。
    # 这里设置为 1000 // 24,即大约每秒24帧的速度(模拟电影的帧率),这意味着每帧之间会有短暂的延迟。
	# 如果检测到按下了 ESC 键(ASCII码为27),则跳出循环并结束程序。
    if cv2.waitKey(delay=1000 // 24) == 27: 
    	break
# 释放摄像头资源,确保摄像头不再被占用,以便其他应用程序可以访问它。
cap.release()
# 关闭所有由 OpenCV 创建的窗口,释放相关资源。
cv2.destroyAllWindows()

3.3 PIL

PIL (Python Imaging Library) 轻量级图像处理, 是专门用于图像处理的 Python 库,Python 内置库,适合简单编辑与格式转换。易于使用且能无缝衔接 PyTorch。

from PIL import Image

img = Image.open("哪吒.jpeg")          # 读取为 PIL.Image 对象
print(img.size, img.width) # 输出 (3840, 2160) 3840
img.resize((100, 100))                # 调整尺寸
img.rotate(-20)                       # 旋转
img.convert("L")                      # 转灰度图
np.array(img).shape
img.save(fp="哪吒2.jpeg")              # 保存

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

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

相关文章

Docker Desktop WebAPI《1》

方法1 》》生成 的文档不要动, 》》执行 Container(Dockerfile) 会生成镜像文件和容器 》》生成的镜像和容器 在 Docker Desktop 中可以查看 用VS 的 Container Dockerfile 调试 但把这个调试工工具 停止,WebAPi就不能访问了 …

《OpenCV》——特征提取与匹配方法

特征提取 特征提取是从原始数据中提取出能够代表数据本质特征和关键信息的过程,在很多领域都有广泛应用。原始数据往往包含大量的冗余信息,特征提取的目的是去除这些冗余,提取出最具代表性、最能区分不同类别或模式的特征,从而降…

如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件

DHTMLX Scheduler 是一个全面的调度解决方案,涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能,并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下,很可能可以使用自定义解决方案来实现此类功能。…

​矩阵元素的“鞍点”​

题意: 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入格式: 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数…

Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示

1、现象:当Qt的窗口最小化时,isVisible值一定是true,这是正常的。 解释:在Qt中,当你点击窗口的最小化按钮时,Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反,它会改变窗口…

Unity-Mirror网络框架-从入门到精通之LagCompensation示例

文章目录 前言什么是滞后补偿Lag Compensation示例延迟补偿原理ServerCubeClientCubeCapture2DSnapshot3D补充LagCompensation.cs 独立算法滞后补偿器组件注意:算法最小示例前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mir…

Jenkins 通过 Execute Shell 执行 shell 脚本 七

Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…

PyCharm 批量替换

选择替换的内容 1. 打开全局替换窗口 有两种方式可以打开全局替换窗口: 快捷键方式: 在 Windows 或 Linux 系统下,按下 Ctrl Shift R。在 Mac 系统下,按下 Command Shift R。菜单操作方式:点击菜单栏中的 Edit&…

Linux-文件基本操作

1.基本概念 文件: 一组相关数据的集合 文件名: 01.sh //文件名 2.linux下的文件类型 b block 块设备文件 eg: 硬盘 c character 字符设备文件 eg: 鼠标,键盘 d directory 目录文件 eg: 文件夹 - regular 常规文件…

Oracle临时表空间(基础操作)

临时表空间 临时表空间:用来存放用户的临时数据,临时数据在需要时被覆盖,关闭数据库后自动删除,其中不能存放永久性数据。 用户进程和服务器进程是一对一的叫做专用连接。 任何一个用户连到oracle数据库,oracle都会…

数据结构-基础

1、概念: 程序 数据结构 算法 2、程序的好坏 可读性,稳定性,扩展性,时间复杂度,空间复杂度。 3、数据结构 是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构, 能…

AGI的基石:什么是机器学习

什么是机器学习:机器学习是人工智能的子集,深度学习是其重要的组成部分,包括不限于:deep neural networks 、deep belief networks和recurrent neural networks。在深度学习中,有三种基本的神经网络架构:FF…

SQL布尔盲注+时间盲注

1.布尔盲注 双重for循环 import requestsurl http://127.0.0.1/sqli-labs-master/Less-8/index.phpdef database_name():datebasename for i in range(1, 9): # 假设数据库名称最多8个字符for j in range(32, 128): # ascii 可见字符范围从32到127payload f"?id1 A…

2024-2025年主流的开源向量数据库推荐

以下是2024-2025年主流的开源向量数据库推荐,涵盖其核心功能和应用场景: 1. Milvus 特点:专为大规模向量搜索设计,支持万亿级向量数据集的毫秒级搜索,适用于图像搜索、聊天机器人、化学结构搜索等场景。采用无状态架…

Mysql中使用sql语句生成雪花算法Id

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

MySQL - 索引 - 介绍

索引(Index)是帮助数据库高效获取数据的数据结构. 结构 语法 创建索引 creat [unique] index 索引名 on 表名 (字段名, ...); //创建唯一索引时加上unique, 多个字段用逗号隔开 查看索引 show index from 表名; 删除索引 drop index 索引名 on 表名;

XSS 常用标签及绕过姿势总结

XSS 常用标签及绕过姿势总结 一、xss 常见标签语句 0x01. 标签 <a href"javascript:alert(1)">test</a> <a href"x" onfocus"alert(xss);" autofocus"">xss</a> <a href"x" onclickeval(&quo…

财务主题数据分析-企业盈利能力分析

企业盈利能力数据主要体现在财务三张表中的利润表里面&#xff0c;盈利能力需要重点需要关注的指标有&#xff1a;毛利率、净利率、净利润增长率、营业成本增长率等&#xff1b; 接下来我们分析一下某上市公司披露的财务数据&#xff0c;看看该企业盈利能力如何&#xff1a; …

你需要了解的远程登录协议——Telnet

你需要了解的远程登录协议——Telnet 一. 什么是Telnet&#xff1f;二. Telnet的优缺点三. Telnet vs SSH&#xff1a;哪一个更适合&#xff1f;四. Telnet的应用场景 前言 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神…

web逆向企鹅音乐,下载歌手歌单音乐

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 下载资源链接&#xff1a;https://download.csdn.net/download/randy521520/90374039 一、找出需要加密的参数 1.js运行 atob…