图像及视频的基本操作

文章目录

    • 一、认识计算机中的图像
    • 二、图像数据的读取
    • 三、数据读取-视频
    • 四、图像的其他操作

一、认识计算机中的图像

在这里插入图片描述
一张彩色图片是由很多个像素点组合而成的,而一个像素点是由R G B三个通道组成。RGB代表红色(Red)、绿色(Green)、蓝色(Blue)三种颜色的光的组合。RGB是加色模型的一种,用于显示图像。每个像素点的颜色都是通过调整这三种颜色的光的强度来混合得到的,而光的强度是在【0-255】

例如上面那个色彩像素块,它第二行倒数第一个的色点是有红色(R)的201亮度,加绿色(G)的155亮度,加蓝色(B)的165亮度组合而成的。

对于黑白图片(称为灰度图像),是没有以上三个颜色通道的,它只有一个通道,它只需亮度即可。

在这里插入图片描述
我们可以看到,这些像素点就是一些矩阵。如果一张图片的宽是500,高是500,那么它每一个像素点的RGB也是500x500,一般表示为【500,500,3】,这三个数分别代表着宽,高,颜色通道。

二、图像数据的读取

# 导入OpenCV库,用于图像处理
import cv2
# 导入matplotlib的pyplot模块,用于图像显示
import matplotlib.pyplot as plt
# 导入numpy库,用于数值计算
import numpy as np

# 使用cv2.imread()函数读取位于指定路径的图像文件
# "E:\\XUEXI\\Python_learn\\tupian\\1.jpg" 是图像文件的绝对路径
# 如果图像文件不存在或路径错误,该函数将返回None
img = cv2.imread("E:\\XUEXI\\Python_learn\\tupian\\1.jpg")

# 使用cv2.imshow()函数在窗口中显示图像
# 第一个参数是窗口名称,第二个参数是要显示的图像
cv2.imshow('Image', img)

# 使用cv2.waitKey()函数等待键盘输入
# 参数0表示无限期等待,直到用户按下任意键
cv2.waitKey(0)

# 使用cv2.destroyAllWindows()函数关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()

cv2.imread()函数读取位于指定路径的图像文件,并且引用图片的绝对路径需要使用 ‘\’ 进行引用

如果图像文件不存在或路径错误,该函数将返回None,可以用以下代码规范表达:

# 检查图片是否正确读取
if img is None:
    print("Error: 图片未找到或路径错误。")
else:
    cv2.imshow('Image', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

使用cv2.imshow()函数在窗口中显示图像,cv2.imshow()的第一个参数是窗口名称,第二个参数是要显示的图像

cv2.waitKey()函数用于等待键盘输入,参数0表示无限期等待,直到用户按下任意键;如果参数不为0,则为定时显示。例如cv2.waitKey(10000)则图片显示10秒钟然后自动关闭。

cv2.destroyAllWindows()函数关闭所有OpenCV创建的窗口

我们也可以通过输出img来看看它的具体组成
在这里插入图片描述
可以看到它也是一个矩阵,并且值的范围都在【0-255】之间。

图片的读取也可以将它写成一个函数,等使用的时候直接调用就可以了:

def cv2_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

灰色图片读取方式
加上cv2.IMREAD_GRAYSCALE即可变成灰色图片

img = cv2.imread("E:\\XUEXI\\Python_learn\\tupian\\1.jpg",cv2.IMREAD_GRAYSCALE)

在这里插入图片描述
很多情况下,我们一般都会将彩色图片先读取成灰色图片进行预处理的。就例如下面所示,颜色通道失去GBR三通道,并且图像的尺寸也减小了,更适合用于图像预处理。
在这里插入图片描述
在这里插入图片描述
图片的保存方法:

cv2.imwrite('mydog.jpg',img)

三、数据读取-视频

import cv2
import matplotlib.pyplot as plt
import numpy as np

# 使用cv2.VideoCapture()函数创建一个VideoCapture对象,用于读取视频文件
vc = cv2.VideoCapture("E:\\XUEXI\\Python_learn\\shipin\\1.mp4")

# 检查视频是否成功打开
if vc.isOpened():
    # 如果成功打开,读取视频的第一帧
    open, frame = vc.read()
else:
    # 如果失败,设置open为False
    open = False

# 使用while循环读取视频的每一帧
#while open:也就是当open = True时
while open:
    # 读取下一帧
    ret, frame = vc.read()
    # 如果读取的帧是None,说明视频已经结束,跳出循环
    if frame is None:
        break
    # 如果读取成功(ret为True),则进行处理
    if ret == True:
        # 将当前帧从BGR颜色空间转换为灰度图像
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 使用cv2.imshow()函数显示灰度图像
        cv2.imshow("result", gray)
        # 使用cv2.waitKey()函数等待80毫秒,检查是否有按键按下
        # 如果按下的是ESC键(键码27),则跳出循环
        if cv2.waitKey(80) & 0xFF == 27:
            break

# 释放VideoCapture对象,释放视频文件
vc.release()
# 关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()

cv2.VideoCapture()函数创建一个VideoCapture对象,用于读取视频文件

在OpenCV中,cv2.VideoCapture.read()方法用于从视频流或视频文件中读取帧。这个方法返回两个值:ret和frame。

ret是一个布尔值(True或False)。
如果成功读取帧,ret为True。
如果无法读取帧(例如,视频已经结束或读取过程中发生错误),ret为False。

frame是当前读取的帧的图像数据。
如果ret为True,frame包含当前帧的图像数据。
如果ret为False,frame可能为None或不包含有效数据。

运行结果是一段视频:
在这里插入图片描述

四、图像的其他操作

截取部分图像数据

img = cv2.imread("E:\\XUEXI\\Python_learn\\tupian\\1.jpg")
cat = img[0:50,0:200]
cv2_show("cat", cat)

cat = img[0:50,0:200]这里的意思是截取图片的宽【0-50】,长【0-200】

运行结果:
在这里插入图片描述

颜色通道提取

# 导入OpenCV库,用于图像处理
import cv2
# 导入matplotlib的pyplot模块,用于图像显示(虽然在这个代码中没有使用到)
import matplotlib.pyplot as plt
# 导入numpy库,用于数值计算(虽然在这个代码中没有使用到)
import numpy as np

# 定义一个函数cv2_show,用于显示图像
def cv2_show(name, img):
    # 使用cv2.imshow()函数显示图像
    cv2.imshow(name, img)
    # 使用cv2.waitKey(0)函数等待,直到用户按下任意键
    cv2.waitKey(0)
    # 使用cv2.destroyAllWindows()函数关闭所有OpenCV创建的窗口
    cv2.destroyAllWindows()

# 使用cv2.imread()函数读取位于指定路径的图像文件
img = cv2.imread("E:\\XUEXI\\Python_learn\\tupian\\1.jpg")

# 使用cv2.split()函数将图像的BGR通道分离
b, g, r = cv2.split(img)
# 使用cv2.merge()函数将分离的通道重新合并,用于后续操作
img = cv2.merge((b, g, r))

# 创建图像的副本
cur_img = img.copy()
# 将副本图像的BGR通道中的B和G通道值设置为0,只显示R通道
cur_img[:, :, 0] = 0
cur_img[:, :, 1] = 0
# 使用cv2_show函数显示修改后的图像
cv2_show("R", cur_img)

# 创建图像的副本
cur_img = img.copy()
# 将副本图像的BGR通道中的B通道值设置为0,只显示G和R通道
cur_img[:, :, 0] = 0
cur_img[:, :, 2] = 0
# 使用cv2_show函数显示修改后的图像
cv2_show("G", cur_img)

# 创建图像的副本
cur_img = img.copy()
# 将副本图像的BGR通道中的G通道值设置为0,只显示B和R通道
cur_img[:, :, 1] = 0
cur_img[:, :, 2] = 0
# 使用cv2_show函数显示修改后的图像
cv2_show("B", cur_img)

cv2.split()函数将图像的BGR通道分离

cv2.merge()函数将分离的通道重新合并,用于后续操作

cur_img[:, :, 0] = 0
cur_img[:, :, 1] = 0

cur_img:是原图像的一个副本。
[:, :, 0]:表示选择图像的所有行(:)和所有列(:),以及第一个颜色通道(0代表蓝色通道)。
[:, :, 1]:表示选择图像的所有行和所有列,以及第二个颜色通道(1代表绿色通道)。
这两行代码的作用是:
将cur_img图像的所有蓝色通道(B通道)的像素值设置为0。
将cur_img图像的所有绿色通道(G通道)的像素值设置为0。
从而达到颜色通道提取的作用。

只保留红色通道的运行结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统基础-文件系统

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-文件系统 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 回顾C语言…

RabbitMQ进阶_可靠性

文章目录 一、 发送者的可靠性1.1、 生产者重试机制1.2、 生产者确认机制1.2.1、确认机制理论1.2.2、确认机制实现1.2.2.1、定义ReturnCallback1.2.2.2、定义ConfirmCallback 二、 MQ的可靠性2.1、 数据持久化2.1.1、 交换机持久化2.1.2、 队列持久化2.1.3、 消息持久化 2.2、 …

R语言机器学习算法实战系列(四)随机森林算法+SHAP值 (Random Forest)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述特征选择数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性模型解释保…

C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…

MinIO快速入门:开启你的文件存储之旅

在现代应用中,文件存储服务是至关重要的组件之一。像腾讯云的COS(对象存储服务)等云存储服务提供了丰富的功能,但随之而来的云端费用也是开发者无法忽视的问题。本文将介绍一款开源、高性能的对象存储服务——MinIO,它…

【含开题报告+文档+PPT+源码】基于SSM框架的诗词吟诵知识学习系统的设计与实现

开题报告 随着信息技术的迅猛发展和互联网的普及,在线教育逐渐成为现代教育的重要形式。在线学习平台以其便捷性、灵活性和个性化等特点,受到广大师生的青睐。特别是在线吟诵知识学习,已经成为许多学生提升自我修养、陶冶情操的重要途径。青…

基于华为云CodeArts Repo和流水线门禁的分支合并与部署

本文分享自华为云社区《【开发者空间实践】基于Repo和流水线门禁的分支合并与部署-云社区-华为云》 一、案例介绍 流水线(CodeArts Pipeline)提供可视化、可编排的CI/CD持续交付软件生产线,帮助企业快速转型,实现DevOps持续交付高…

FastApi SQLAlchemy SQLite

FastApi fastapi是一个用于构建API 的现代、快速(高性能)的web框架,它是建立在Starlette和Pydantic基础上的。 Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库,Starlette是一种轻量级的ASGI框架/工具包&…

Qt编写的modbus模拟器/支持网络和串口以及websocket/支持网络rtu

一、使用说明 1.1 设备模拟-Com 第一步,填写要模拟的设备地址,0表示自动处理,也就是收到什么地址就应答什么地址。第二步,填写对应的串口号和波特率。第三步,单击打开串口,成功后会变成关闭串口字样。单击…

智慧公厕厂家:智慧公厕建设推动城市公厕智能化变革

随着科技的不断进步,智慧公厕厂家正以创新之力推动着城市公厕的智能化变革。 一、提升用户体验 智慧公厕为使用者带来了前所未有的便利。通过实时显示厕位使用情况,避免了旅客的无效排队,节省了时间。感应式设备如水龙头、洗手液等&#xff…

工业数据采集网关如何与设备进行连接?天拓四方

在工业自动化与智能化日益普及的今天,工业数据采集网关成为了连接各种工业设备与数据中心的桥梁。 一、工业数据采集网关的作用 工业数据采集网关,作为工业自动化系统的核心组成部分,负责实时采集、处理和传输来自各种工业设备的数据。它能…

RS232和RS485

文章目录 RS232和RS485编程与UART一摸一样RS232RS485 前情提要:UART的缺点 电气接口不统一 UART只是对信号的时序进行了定义,而未定义接口的电气特性 电压电平不兼容 UART通信中通常使用处理器的电平(如TTL电平),但不…

【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式

上篇文章: 【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年10月18日20点56分 文章目录 基本…

主键 外键

主键 外键 在关系型数据库中,主键(Primary Key)和外键(Foreign Key)是用于维护数据完整性和建立表之间关系的重要概念。 主键(Primary Key) 定义: 主键是一个或多个列的组合,其值能…

初始Python篇(4)—— 元组、字典

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 元组 相关概念 元组的创建与删除 元组的遍历 元组生成式 字典 相关概念 字典的创建与删除 字典的遍历与访问 字典…

Maple :一款强大的计算软件,广泛应用于数学、工程、物理和其他科学领域

Maple 是一款强大的计算软件,广泛应用于数学、工程、物理和其他科学领域。它以其符号计算、数值计算和图形可视化能力而闻名,适用于从基础到高级的数学问题。以下是对 Maple 的详细介绍: 1. 基本功能 符号计算 :Maple 能够处理复…

RBAC 模型

系统权限控制最常采用的访问控制模型就是 RBAC 模型 。 什么是 RBAC 呢? RBAC 即基于角色的权限访问控制(Role-Based Access Control)。这是一种通过角色关联权限,角色同时又关联用户的授权的方式。 简单地说:一个用…

鸿蒙网络编程系列7-TLS安全数据传输单向认证示例

1.TLS简介 TLS(Transport Layer Security)协议的前身是SSL(Secure Socket Layer)安全套接层协议,由Netscape公司于1994年提出,是一套网络通信安全协议。IETF(The Internet Engineering Task Fo…

ORACLE 19C安装 RAC报错

1. 问题描述 在Oracle 19C RAC的安装过程中,使用克隆方式在两个节点上部署集群。当第一个节点配置好基础服务后,关机并克隆节点。当尝试在第二个节点上通过页面进行RAC安装时,出现以下错误: [INS-32070] Could not remove the n…