【计算机视觉】图像基本操作

news2024/11/29 20:50:18

1. 数字图像表示

  • 一幅尺寸为M·N的图像可以用矩阵表示,每个矩阵元素代表一个像素,元素的值代表这个位置图像的亮度;其中,彩色图像使用3维矩阵M·N·3表示;对于图像显示来说,一般使用无符号8位整数来表示图像亮度,取值范围[0,255]

  • 在这里插入图片描述

    图像数据按照自左向右、自上向下的顺序存储在计算机内存中,坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。

    在OpenCV中,RGB彩色图像的通道顺序为BGR。

2. 图像文件的读写与显示

2.1 图像文件的读取

cv2.imread() 是 OpenCV 中用于从文件中读取图像的函数。它支持多种图像格式(如 JPEG、PNG、BMP 等),并将图像读取为 NumPy 数组。

cv2.imread(filename, flags=cv2.IMREAD_COLOR)
参数说明
  1. filename (str):

    • 图像文件的路径,可以是相对路径或绝对路径。
    • 如果路径无效或者文件不存在,cv2.imread() 会返回 None
  2. flags (int, 可选):

    • 控制图像的读取方式,默认值为 cv2.IMREAD_COLOR

    常见取值包括:

    • cv2.IMREAD_COLOR (1): 以彩色模式加载图像,忽略图像的透明通道。如果图像是灰度图,会将其转换为 BGR(3 通道)。
    • cv2.IMREAD_GRAYSCALE (0): 以灰度模式加载图像,返回单通道(8 位深度)。
    • cv2.IMREAD_UNCHANGED (-1): 读取图像的原始数据,包括透明通道(若存在)。
    • cv2.IMREAD_ANYCOLOR: 读取为彩色图像,但会自动适配图像格式。
    • cv2.IMREAD_ANYDEPTH: 以原始位深(16 位或 32 位浮点)加载图像,而不是默认的 8 位。
返回值
  • 成功时,返回一个 NumPy 数组,表示图像的像素数据。
    • 彩色图像的形状为 (height, width, 3)(BGR 格式)。
    • 灰度图像的形状为 (height, width)
  • 失败时,返回 None,通常是因为文件不存在或路径不正确。

2.2 图像文件的显示

cv2.imshow() 是 OpenCV 中用于显示图像的函数,它会在一个窗口中显示加载或处理后的图像。

cv2.imshow(winname, mat)
参数说明
  1. winname (str):

    • 窗口的名称,可以是任意字符串。
    • 如果指定的窗口名称不存在,会自动创建一个窗口并显示图像。
    • 多次调用时,若窗口名称相同,则会在同一个窗口内更新显示内容。
  2. mat (ndarray):

    • 要显示的图像数据,通常是由 cv2.imread() 或其他 OpenCV 图像处理函数生成的 NumPy 数组。
    • 支持以下几种格式:
      • 彩色图像:形状为 (height, width, 3),默认 BGR 格式。
      • 灰度图像:形状为 (height, width)
      • 深度或透明通道图像在某些情况下可能需要预处理以适配。
特性
  • 图像显示的窗口会保持阻塞,直到用户按键关闭窗口(通常需要配合 cv2.waitKey() 使用)。
  • 窗口默认大小与图像大小一致,但可以通过 cv2.resizeWindow() 调整大小。
其他相关函数
  1. cv2.waitKey(delay)

    • 用于捕获键盘事件。
    • 参数 delay 是等待的时间,单位为毫秒。
      • 如果为 0,程序会无限等待键盘输入。
      • 如果为正整数,则会等待指定时间。
    • 返回值是按键的 ASCII 码(例如 27 对应 ESC 键)。

    示例:

    key = cv2.waitKey(0)
    if key == 27:  # 按 ESC 键关闭
        cv2.destroyAllWindows()
    
  2. cv2.destroyWindow(winname)cv2.destroyAllWindows()

    • cv2.destroyWindow(winname):关闭特定名称的窗口。
    • cv2.destroyAllWindows():关闭所有 OpenCV 创建的窗口。
  3. cv2.namedWindow(winname, flags)

    • 用于创建窗口并设置属性。
    • 示例:
      cv2.namedWindow('Resizable Window', cv2.WINDOW_NORMAL)
      cv2.imshow('Resizable Window', image)
      cv2.waitKey(0)
      
  4. cv2.resizeWindow(winname, width, height)

    • 调整窗口大小(需配合 cv2.WINDOW_NORMAL 使用)。
    • 示例:
      cv2.namedWindow('Resizable Window', cv2.WINDOW_NORMAL)
      cv2.resizeWindow('Resizable Window', 800, 600)
      cv2.imshow('Resizable Window', image)
      cv2.waitKey(0)
      

2.3 图像文件的写入

cv2.imwrite() 是 OpenCV 中用于将图像保存到文件的函数,可以将处理后的图像数据以指定格式保存到磁盘。

cv2.imwrite(filename, img, params=None)
参数说明
  1. filename (str):

    • 保存图像的完整路径,包括文件名和扩展名。
    • 扩展名决定保存图像的格式(例如 .jpg, .png, .bmp, .tiff 等)。
    • 示例:'output.jpg''/path/to/output.png'
  2. img (ndarray):

    • 要保存的图像数据,通常是一个 NumPy 数组。
    • 格式可以是:
      • 彩色图像:形状为 (height, width, 3),数据类型为 uint8
      • 灰度图像:形状为 (height, width),数据类型为 uint8
  3. params (list, 可选):

    • 图像格式的参数,取决于文件格式。例如,可以指定 JPEG 的压缩质量或 PNG 的压缩级别。
    • 常见参数:
      • 对于 JPEG (.jpg):
        • [cv2.IMWRITE_JPEG_QUALITY, quality]quality 是压缩质量(0-100),默认值为 95,值越高质量越好。
      • 对于 PNG (.png):
        • [cv2.IMWRITE_PNG_COMPRESSION, compression]compression 是压缩级别(0-9),默认值为 3,值越高压缩越强但速度越慢。
      • 对于 WebP (.webp):
        • [cv2.IMWRITE_WEBP_QUALITY, quality]quality 是压缩质量(0-100)。
返回值
  • 返回值为布尔值 (TrueFalse):
    • True: 保存成功。
    • False: 保存失败(如路径无效或无写权限)。

3 视频文件的读写与显示

对于图像文件,可以从其扩展名得知图像的格式,但是并不适用于视频文件,因为视频文件的格式主要由压缩算法决定;压缩算法称为编码器,解压算法成为解码器,编解码算法称为编解码器。
编解码器种类很多,主要由MJPG、XVID、DIVX等等。

3.1 视频读取

cv2.VideoCapture() 是 OpenCV 用于视频捕获和处理的函数,可以从视频文件、摄像头或视频流中获取帧数据。

cv2.VideoCapture(index, apiPreference=None)
参数说明
  1. index:

    • 如果要从摄像头捕获,index 是摄像头设备的编号。
      • 通常,0 代表默认摄像头,1 代表外接摄像头(如果有)。
    • 如果要从文件读取,index 是视频文件的路径(如 'video.mp4')。
  2. apiPreference (可选):

    • 指定视频捕获后端(API)的优先级,默认为 cv2.CAP_ANY,OpenCV 会自动选择适当的后端。
    • 常见的后端值:
      • cv2.CAP_ANY:自动选择(默认)。
      • cv2.CAP_V4L2:用于 Linux 的 V4L2 接口。
      • cv2.CAP_DSHOW:DirectShow(Windows)。
      • cv2.CAP_MSMF:Windows Media Foundation。
      • cv2.CAP_FFMPEG:FFmpeg(跨平台,支持大部分格式)。
返回值
  • 返回一个 cv2.VideoCapture 对象,通过该对象可以捕获视频帧。

3.2 视频写入

cv2.VideoWriter() 是 OpenCV 用于将视频帧保存为视频文件的函数。通过这个函数,您可以将处理后的图像帧编码为视频并存储到磁盘。

cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor=True)
参数说明
  1. filename (str):

    • 视频输出文件的路径,包括文件名和扩展名。
    • 扩展名决定了视频的编码格式(如 .avi, .mp4, .mkv 等)。
  2. fourcc (int):

    • 表示视频编码器的 4 字符代码 (FourCC)。
    • 使用 cv2.VideoWriter_fourcc() 函数生成,例如:
      • cv2.VideoWriter_fourcc(*'XVID'):XVID 编解码器(常用于 .avi 格式)。
      • cv2.VideoWriter_fourcc(*'MP4V'):MP4 编解码器(常用于 .mp4 格式)。
      • cv2.VideoWriter_fourcc(*'H264'):H.264 编解码器(适用于高效压缩)。
    • 不同系统和平台可能支持的编码器不同。
  3. fps (float):

    • 视频的帧率,即每秒的帧数。
    • 例如,30.0 表示 30 帧/秒。
  4. frameSize (tuple):

    • 视频帧的宽度和高度,格式为 (width, height)
    • 所有传入帧的大小必须与此一致,否则会抛出错误。
  5. isColor (bool):

    • 指定视频是否为彩色。
    • 默认为 True(彩色),如果为 False,表示灰度视频。
返回值
  • 返回一个 cv2.VideoWriter 对象,用于写入视频。

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

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

相关文章

VSCode 下载 安装

VSCode【下载】【安装】【汉化】【配置C环境(超快)】(Windows环境)-CSDN博客 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/Downloadhttps://code.visualstudio.com/Download 注意&#xff0…

【Python入门】Python数据类型

文章一览 前言一、变量1.1.如何使用变量1.2.如何定义变量的名字(标识符) 二、数据类型2.1 整型数据2.2 浮点型数据2.3 布尔型(bool)数据2.4 复数型数据2.5 字符串类型1 > 字符串相加(合并)(&…

算法基础 - 高斯牛顿法(曲线拟合)

文章目录 1. 高斯牛顿法发展历程2、问题的引出3、高斯牛顿法的前世3.1、一阶,二阶梯度法共有原理3.2、最速下降法(一阶梯度法)3.3、牛顿法(二阶梯度法) 4、高斯牛顿法4.1 高斯牛顿法的思想4.2 最小二乘问题4.3 高斯牛顿…

Vue+Element Plus实现自定义表单弹窗

目录 一、基本框架 1.父组件index.vue 2.子组件FormPop.vue 二、细节补充 1)input、textarea、select、input number 2)daterange、date、monthrange 3)数据定义 4)没改样式的效果 5)最终效果 三、最终代码 …

VMware Workstation Pro下载安装及简单设置

VMware Workstation Pro下载 方法一:官网下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro账号请自行注册,选择最新版本17.6.1 下载后用md5sum_x64.exe验证下载的文件完整性 方法二 百度网盘 通过网…

ospf协议(动态路由协议)

ospf基本概念 定义 OSPF 是典型的链路状态路由协议,是目前业内使用非常广泛的 IGP 协议之一。 目前针对 IPv4 协议使用的是 OSPF Version 2 ( RFC2328 );针对 IPv6 协议使用 OSPF Version 3 ( RFC2740 )。…

数据结构之循环链表和栈

一、循环链表 1、概念 循环链表:就是首尾相连的链表,通过任意一个节点,都能将整个链表遍历一遍 分类:单向循环链表、双向循环链表 2、单向循环链表的类格式 单向循环链表也就是单向链表的最后一个节点的next域不再为None,而是…

linux安装部署mysql资料

安装虚拟机 等待检查完成 选择中文 软件选择 网络和主机名 开始安装 设置root密码 ADH-password 创建用户 等待安装完成 重启 接受许可证 Centos 7 64安装完成 安装mysql开始 Putty连接指定服务器 在 opt目录下新建download目录 将mysql文件传到该目录下 查看linux服务器的…

HTML 霓虹灯开关效果

HTML 霓虹灯开关效果 1.简介&#xff1a;该代码为纯html&#xff0c;CSS写在了内部&#xff0c;不需要额外引入&#xff0c;霓虹灯开关效果很漂亮&#xff0c;应用在个人物联网项目中是一个比较不错的选择。 2.运行效果&#xff1a; 3.源码&#xff1a; <!DOCTYPE html&g…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…

24/11/26 视觉笔记 通过特征提取和透视变换查找对象

在本节中我们将检测和跟踪任意大小的对象&#xff0c;这些对象可能是在不同角度或者在部分遮挡的情况下观察到的。 为此我们将运用特征描述子&#xff08;Feature Descriptor&#xff09;&#xff0c;这是捕获感兴趣对象的重要属性的一种方式。我们这样是为了即使将对象嵌入繁…

【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】

【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇12-基于stm32c8t6的智能称重系统设计 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 ----…

ubuntu中使用ffmpeg和nginx推http hls视频流

视频流除了rtmp、rtsp&#xff0c;还有一种是http的hls流&#xff0c;使用http协议传输hls格式的视频数据。 nginx支持推送hls视频流&#xff0c;使用的是rtmp模块&#xff0c;即rtmp流推送成功了&#xff0c;hls流也没问题。怎么推送rtmp流&#xff0c;请参考我的文章&#x…

5.2.机器学习--岭回归+局部线性回归

目录 1.岭回归 1.1代码示例 2.局部线性回归 2.1代码示例 1.最小二乘法&#xff1a; 平面几何表达直线(两个系数): 重新命名变量: 强行加一个x01&#xff1a; 向量表达&#xff1a; 2.损失函数&#xff1a; 矩阵表达&#xff1a; 矩阵展开&#xff1a; 推导&#xff1a; …

nvidia-container-toolkit安装问题(OpenPGP)

1.正常情况下 apt-get install -y nvidia-container-toolkit2.使用nvidia源 nvidia-container-toolkit官网有安装教程 2.1 配置生产存储库 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-containe…

电脑上的ip地址可以改吗?如何改变ip地址

在现代网络环境中&#xff0c;IP地址作为设备在网络中的唯一标识&#xff0c;扮演着至关重要的角色。无论是日常上网冲浪&#xff0c;还是进行专业的网络操作&#xff0c;IP地址都与我们息息相关。那么&#xff0c;电脑上的IP地址可以改吗&#xff1f;答案是肯定的。接下来&…

org.apache.log4j的日志记录级别和基础使用Demo

org.apache.log4j的日志记录级别和基础使用Demo&#xff0c;本次案例展示&#xff0c;使用是的maven项目&#xff0c;搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件&#xff0c;log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…

PHP 生成分享海报

因为用户端有多个平台&#xff0c;如果做分享海报生成&#xff0c;需要三端都来做&#xff0c;工作量比较大。 所以这个艰巨的任务就光荣的交给后端了。经过一定时间的研究和调试&#xff0c;最终圆满完成了任务&#xff0c;生成分享海报图片实现笔记如下。 目录 准备字体文件…

ASP.NET Core 入门

使用 .NET CLI 创建并运行 ASP.NET Core Web 应用。 文章目录 一、先决条件二、创建Web应用项目三、运行应用四、编辑Razor页面 一、先决条件 .NET 8.0 SDK 二、创建Web应用项目 打开命令行界面&#xff0c;然后输入以下命令&#xff1a; dotnet new webapp --output aspne…

基于 Flask 和 Socket.IO 的 WebSocket 实时数据更新实现

简介 随着现代化应用的快速发展&#xff0c;实时数据交互已经成为许多 Web 应用的核心需求&#xff0c;比如实时消息推送、数据监控大屏等。本文将基于一个完整的 WebSocket 实现示例&#xff0c;带你一步步理解如何使用 Flask 和 Socket.IO 构建实时数据更新的 Web 应用。 将…