深度学习-OpenCV运用(1)

news2024/11/15 9:31:11

文章目录

  • 一、OpenCV介绍
  • 二、OpenCV运用
    • 1.读取保存图片
    • 2.读取视频
    • 3.图像切片

一、OpenCV介绍

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它主要用于实时的图像处理和计算机视觉任务。虽然OpenCV本身更多地聚焦于图像处理和视觉任务,但它也提供了与机器学习相关的功能,使得开发者能够利用它来执行一些基本的机器学习任务。

二、OpenCV运用

OpenCV广泛应用于图像处理、视频分析、目标检测、机器学习等多个领域。这里我们先为大家介绍图像处理,与视频分析等相关运用。

1.读取保存图片

以下代码片段主要展示了如何使用OpenCV(通常用cv2来表示)来读取、显示和保存图像,并打印了图像的一些基本属性。

import cv2
import numpy as np
a = cv2.imread('2.png')
print(a)
cv2.imshow("Mech Maiden",a)
b = cv2.waitKey(5000)
print(b)#
"""
调整模型观察shape,dtype,size属性
"""
print("图像形状(shape):",a.shape)
print("图像数据类型(dtype):",a.dtype)
print("图像大小(size):",a.size)
cv2.imwrite(r'./a', a)
  • 图像显示:cv2.imshow() 函数用于在窗口中显示图像。你需要确保在调用 cv2.waitKey()或类似函数之前调用它,因为窗口是事件驱动的,并且只有在有事件(如按键事件)发生时才会更新或保持开启状态。
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/03b25290f1d749029fb4de62c164519f.png在这里插入图片描述

  • 按键等待:cv2.waitKey(0)会无限期地等待用户按键。如果你指定了一个非零参数(如5000毫秒),则函数会等待指定的毫秒数,或者直到用户按键为止(以先到者为准)。如果在这段时间内按下了键,则返回该键的ASCII码;如果没有按键,则返回-1。

  • 图像保存:cv2.imwrite() 需要两个参数:文件路径和要写入的图像。确保为文件指定了正确的扩展名,以便操作系统知道如何处理该文件。

  • 销毁窗口:在程序结束之前,使用 cv2.destroyAllWindows()销毁所有OpenCV创建的窗口是一个好习惯。这有助于释放与窗口相关的资源。如果你只想销毁特定窗口,可以使用
    cv2.destroyWindow(windowName)。

2.读取视频

下面这段代码通过OpenCV库实现了视频文件的打开、逐帧读取、灰度转换、显示以及按键控制视频播放的功能。用户可以通过按下Esc键来停止视频播放并退出程序。同时,在程序结束前,它还负责释放视频文件资源和销毁所有OpenCV创建的窗口,以确保资源得到妥善管理。

# 打开视频文件
video = cv2.VideoCapture('F:/code/pachong/video.mp4')
# 检查是否打开成功
if not video.isOpened():
    print("无法打开视频文件")
    exit()
    # 循环读取视频帧
while True:
    ret, frame = video.read()  # ret是布尔值,表示是否成功读取,frame是读取到的帧
    # 检查是否成功读取帧
    if not ret:
        break
    # 转换灰度图
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('Video', frame)
    if cv2.waitKey(30) == 27:
        break

video.release()
cv2.destroyAllWindows()
  • 打开视频文件:使用cv2.VideoCapture函数尝试打开指定路径的视频文件,这里的’F:/code/pachong/video.mp4’是视频文件的路径
  • 读取视频文件:检查视频文件是否成功打开,然后进入无限循环,逐帧读取视频,使用video.read()方法尝试读取视频中的下一帧 ,它返回两个值ret和frame,ret是一个布尔值,如果正确读取到帧,则为True;如果文件结束或发生错误,则为False ,frame是读取到的帧,它是一个numpy数组 ,如果ret为False,则跳出循环,表示视频已经播放完毕或读取过程中发生了错误。
  • 灰度图转换:将帧从BGR颜色空间转换为灰度图,并展示灰度图。
  • 结束视频播放:程序会暂停30毫秒等待用户输入,如果在30毫秒内有按键被按下,则返回按键的ASCII码;如果没有按键被按下,则返回-1,这里特别检查是否按下了Esc键(ASCII码为27),如果是,则跳出循环,结束视频播放 。

3.图像切片

这段代码是从一个图像文件中读取图像,并从这个图像中裁剪出一个特定的区域,然后显示原始图像和裁剪后的图像。

a = cv2.imread(r'./2.png')
b = a[400:800, 1000:3000]
cv2.imshow('yuantu', a)
cv2.imshow('qiepian', b)
cv2.waitKey(10000)
cv2.destroyAllWindows()
  • 读取图像:a = cv2.imread(r’./2.png’) 尝试从当前目录下读取名为 2.png 的图像文件,并将其存储在变量 a
    中。

  • 裁剪图像:b = a[400:800, 1000:3000] 尝试从图像 a
    中裁剪出一个区域,这个区域的起始行是400,结束行是800(但不包括800),起始列是1000,结束列是3000(但不包括3000)。
    在这里插入图片描述

  • 显示图像:使用 cv2.imshow 函数分别显示原始图像 a 和裁剪后的图像 b。

  • 等待按键:cv2.waitKey(10000)
    使窗口保持打开状态10000毫秒(即10秒),等待用户按键。如果用户在这个时间内按下任意键,cv2.waitKey
    将返回按键的ASCII码;如果超时,则返回-1。

  • 销毁窗口:cv2.destroyAllWindows() 销毁所有OpenCV创建的窗口。

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

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

相关文章

【STM32】FSMC

FSMC在正点原子的HAL课程中用法较为单一,就是用来模拟8080时序驱动LCD屏幕,其实就是利用FSMC读写LCD模块的SRAM。当然,这个我也没有买,只学习了理论。 大部分图片来源:正点原子HAL库课程 专栏目录:记录自己…

无线通信-WIFI通信

文章目录 1. 基础知识2. 工作模式3. AT指令4. 常用AT指令实例5. 连接原子云6. 使用usb转ttl模块测试ATK-MW8266D7. 使用STM32F103ZET6战舰开发板透传模式8. 使用STM32F103ZET6战舰板连接原子云 1. 基础知识 ATK-ESP-01 ATK-ESP-01模块支持标准的IEEE802.11b/g/n协议&#xff0c…

scriptlet failed, exit status 1

执行命令:rpm -evh percona-release-1.0-29.noarch 报错信息: mv: cannot stat ‘/etc/yum.repos.d/percona-telemetry-release.repo’: No such file or directory error: %preun(percona-release-1.0-29.noarch) scriptlet failed, exit status 1 …

面试必备!15个SSH服务器经典问题,助你轻松过关斩将!

SSH(Secure Shell)是Linux系统中最常用的远程管理工具之一,掌握它是每个运维工程师的必备技能。在面试中,关于SSH服务器的相关问题经常会被问到。本文将列出15个常见的SSH服务器面试题,并提供简要解答,帮助你在面试中脱颖而出。 什…

使用 Puppeteer 在 PHP 中解决 reCAPTCHA 以进行网页抓取

您是否在抓取数据时遇到 reCAPTCHA 障碍?我也遇到过。这些 CAPTCHA 挑战会将简单的抓取任务变成一大障碍。但别担心,我有一个解决方案可以帮助您轻松绕过这些障碍。 在本博文中,我将引导您使用 Puppeteer(一个功能强大的 Node.js…

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式:在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…

如何使用ssm实现毕业生交流学习平台+vue

TOC ssm306毕业生交流学习平台vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化,也让时间变得…

某系统任意用户创建漏洞

初来人间不知苦,潦倒半生一身无,转身回望来时路,方知生时为何哭。 漏洞描述 某系统存在任意用户创建漏洞,发送特定的请求包攻击者可以创建管理员账户登录后台 漏洞实战 出现漏洞的文件为 userproce.php,出现漏洞的…

汽车免拆诊断案例 | 马自达CX-3无音频输出

故障现象: 使用触摸屏打开收音机时,单选按钮打开收音机,但无法访问菜单。使用中控台中的旋转控制旋钮时,也会遇到相同的情况。 没有音频输出到车上的任何扬声器,包括卫星导航、蓝牙或语音识别。音量调节也不起作用&a…

食家巷大烤馍,美味超实在

在美食的世界里,总有一些味道能勾起我们内心深处的温暖回忆,食家巷大烤馍便是其中之一。 每一个食家巷大烤馍都是匠心的结晶。首先,精选优质的面粉,确保了烤馍的基础品质。这些面粉经过严格的筛选,颗粒细腻&#xff0c…

2024/8/28 英语每日一段

“Its great were getting these investments, but you actually cant materialize the benefits of these investments if the cities actually cant afford to run it,” he said. All of the eight cities say the planned expansions, such as new light rail lines in Ott…

掌握高效管理技巧:9款顶级待办事项软件

本文将介绍9款优质待办事项清单工具:1.PingCode;2.Worktile;3.滴答清单 (TickTick);4.日事清;5.效能工作任务;6.印象笔记;7.MyLifeOrganized;8.Quire;9.OmniFocus。 在当…

CTFhub通关攻略-SSRF篇【1-5关】

01关 内网访问 根据题意,它让我们去尝试访问127.0.0.1的flag.php,我们点进题目链接 有一个url参数可以进行输入,我们直接访问127.0.0.1的flag.php 这样就得到了flag 02 伪协议读取文件 点开题目链接发现有一个url的参数可以进行填写 题中说让…

【贪心 决策包容性 】757. 设置交集大小至少为2

本文涉及知识点 贪心 决策包容性 LeetCode757. 设置交集大小至少为2 给你一个二维整数数组 intervals ,其中 intervals[i] [starti, endi] 表示从 starti 到 endi 的所有整数,包括 starti 和 endi 。 包含集合 是一个名为 nums 的数组,并…

redis核心数据结构源码分析

dictEntry和redisObject 在 Redis 的实现中,当一个键值对被创建并存储时,键通常是一个字符串,而值则是一个 redisObject。因此,在 dictEntry 结构中,key 成员指向的是一个字符串,而 v.val 成员则指向一个 …

《深入理解JAVA虚拟机(第2版)》- 第2章 - 学习笔记

第二章 Java内存区域与内存溢出异常 2.1 概述 JVM是自动内存管理 2.2 运行时数据区 所谓运行时数据区是JVM在运行Java程序的时候将所管理的内存划分为几块不同的数据区域,分为:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区,如下…

樊振东代言LV旗下品牌,媒介易解读冠军代言背后的商业逻辑

​近日,法国奢侈品巨头LVMH旗下的德国知名拉杆箱品牌RIMOWA宣布,中国乒乓球奥运冠军樊振东成为其品牌挚友。这一合作不仅是RIMOWA对樊振东在巴黎奥运会上出色表现的认可,也标志着品牌与体育冠军联手打造品牌形象的趋势日益显著。 樊振东&…

Moco求解最优化问题使用教程

理论部分 最简单的例子,流程 输出结果分析 理论部分 moco最终是调用CasAdi求解器来进行求解 对不常见的几个符号表达式含义进行解释: 多刚体动力学公式代表系统中,f_inertial (惯性力和科里奥利力);f_app (外力和接触力)&…

SQL注入-ctfshow

首先还是对sql的具体分析和讲解 原理: SQL注入是一种安全漏洞,它允许攻击者通过在应用程序的输入中插入或者操作SQL命令来改变后端数据库的查询和操作。SQL注入的主要原因是代码中直接将用户输入与SQL命令拼接在一起,没有进行适当的验证或清…

网络安全可以从事哪些岗位岗位职责是什么网络安全专业的就业前景

网络安全可以从事哪些岗位 伴随着社会的发展,网络安全被列为国家安全战略的一部分,因此越来越多的行业开始迫切需要网安人员,也有不少人转行学习网络安全。那么网络安全可以从事哪些岗位?岗位职责是什么?相信很多人都不太了解,…