机器学习-OpenCV运用(1)

news2024/11/15 14:00:48

文章目录

  • 一、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/2070849.html

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

相关文章

ARM架构与ARM内核

参考:https://blog.csdn.net/qq_34160841/article/details/105611131 到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?一文帮你梳理基础概念 认识ARM、Cortex-M内核,以及ARMv8-M架构 ARM架构 ARM的架构指的是ARM的指令集架构。ARM指令集…

基于WordPress搭建的写真网站整站打包代码,可直接运营

直接服务器整站源码数据库打包了。 这个包的资源非常多,也非常火爆,吸引力还是挺大的。用这个架设一个引流网站还是轻松的。 图片太多太敏感,就不在这里显示了,懂的都懂。 代码测试过了,运行是完全没问题的。已经好…

CSS学习【margin为负值】

目录 margin塌陷时合并规则 margin重叠概念 可能会发生的情况 外边距重叠计算规则 兄弟元素之间合并,都为负值 当“.box1”和“.box2”都未设置外间距时: 给“.box1”和“.box2”设置外间距后: 兄弟元素间合并,一正一负 …

深入解析SSRF和Redis未授权访问

深入解析SSRF和Redis未授权访问:漏洞分析与防御 在网络安全领域,服务器端请求伪造(SSRF) 和 Redis未授权访问 是两类常见且危险的安全漏洞。 1.2 SSRF攻击的利用 1.2.1 测试并确认SSRF漏洞 一个典型的例子是,当应用…

迭代器的失效问题

vector的插入与删除 我们首先举例说明vector插入和删除操作返回的是什么迭代器 void print(std::vector<int>& vec) {for(auto itvec.begin();it!vec.end();it)std::cout<<*it<<" ";std::cout<<std::endl; }void test() {/*初始化vect…

Simple RPC - 07 从零开始设计一个服务端(下)_RPC服务的实现

文章目录 PreRPC服务实现服务注册请求处理 设计&#xff1a; 请求分发机制 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty实现异步网络通信 Simple RPC - 04 从零开始设计一个客户端&#…

【数据结构】堆主要的应用场景

1. 堆排序 所谓堆排序&#xff0c;就是在堆的基础上进行排序。 在讲解堆排序之前&#xff0c;让我们先来回顾一下堆的概念&#xff0c; 1.1 大根堆和小根堆 堆是一种完全二叉树&#xff0c;它有两种形式&#xff0c;一种是大根堆&#xff0c;另外一种是小根堆。 大根堆&…

2023年看过的电影和电视剧

2023年看过的电影 2023年12月21日&#xff1a;三大队 评价&#xff1a;感觉结尾不太突出&#xff0c;但是值得一看。 2023年10月02日&#xff1a;志愿军&#xff1a;雄兵出击 评价&#xff1a;感觉还行&#xff0c;场面还不错。但是记不得太多情节。 2023年08月31日&#xf…

如何将 Parallels Desktop 许可证密钥移至新的 Mac?

根据 Parallels 最终用户许可协议&#xff08;EULA&#xff09;的规定&#xff0c;您最多可以在一台设备上下载、安装和使用 Parallels Desktop 的一个原始副本。但是面对更换新机的用户&#xff0c;可以通过迁移的方式把 Parallels Desktop 许可证密钥移至新的 Mac&#xff0c…

跟《经济学人》学英文:2024年08月24日这期 What to make of America’s topsy-turvy economy

What to make of America’s topsy-turvy economy Don’t panic just yet topsy-turvy&#xff1a;颠倒的&#xff1b;混乱的&#xff1b;乱七八糟的&#xff1b; make of&#xff1a;理解&#xff1b;认为&#xff1b;看待 Make of: 这里的 “make of” 意思是如何理解或解释…

自来水厂供水监控的串口服务器应用

随着城市化进程的加快和人口的不断增长&#xff0c;自来水厂作为城市供水系统的核心组成部分&#xff0c;其稳定性和安全性对于城市的正常运行和居民的生活质量至关重要。传统的供水监控系统存在数据传输效率低、维护成本高、实时性差等问题&#xff0c;难以满足现代城市对供水…

TMDOG的微服务之路_08——使用Docker部署NestJS微服务

TMDOG的微服务之路_08——使用Docker部署NestJS微服务 博客地址&#xff1a;TMDOG的博客 在上一篇博客中&#xff0c;我们探讨了如何使用 NestJS 创建一个简单的微服务架构。为了将这些微服务部署到生产环境&#xff0c;我们可以使用 Docker 来打包和管理这些服务。本篇博客将…

Docker 数据卷的使用

Docker 数据卷的使用 文章目录 Docker 数据卷的使用导引1. 创建数据卷2. 查看创建的数据卷3. 查看数据卷的详细信息 导引 在Docker中&#xff0c;我们在创建并运行容器后&#xff0c;可以通过exec命令进入容器内部进行操作&#xff0c;但会发现一些命令是无法使用的&#xff0…

NSSCTF练习记录:[SWPUCTF 2021 新生赛]pigpig

题目&#xff1a; 根据题目名字和附件名提示&#xff0c;猜测为猪圈密码&#xff0c;对应手动解码 whenthepigwanttoeat

持久层接口开发

通常一个接口定义后&#xff0c;从持久层开始开发。 对于一个新模块需要使用工具生成模型类、mapper接口、mapper映射文件等&#xff0c;下边介绍一个工具用于自动生成代码。 1. 代码生成工具 1.1 安装插件 1.2 重启IDEA&#xff0c;连接mysql 1.3 配置代码生成规则 点击“c…

C++容器之字符串的详解

每日诗词&#xff1a; 我见青山我妩媚&#xff0c;料青山见我应如是。 ——《贺新郎甚矣吾衰矣》【宋】辛弃疾 目录 补漏&#xff1a; vector在分配新内存块后如何进行元素复制 正文&#xff1a; 字符串变量和常量 字符串变量&#xff1a; 解析&#xff1a; 字符串常量…

揭露 Sapiens:未来以人为中心的视觉任务

Sapiens | Meta Meta Reality Labs 隆重推出 Sapiens&#xff0c;这是一个尖端的模型系列&#xff0c;专为四种以人为中心的基本视觉任务而设计&#xff1a;二维姿态估计、身体部位分割、深度估计和表面法线预测。 我们的 Sapiens 模型可无缝处理 1K 高分辨率推理&#xff0c…

加州大学圣地亚哥分校 沉浸式遥操作机器人系统

想象一下&#xff0c;在VR中控制游戏角色时&#xff0c;你的手部动作能够无缝转化为角色的行动。如果将这种体验应用于现实世界中的双手机器人控制&#xff0c;将带来革命性的人机交互体验。随着Apple Vision Pro的问世&#xff0c;这一设想逐渐变为现实。然而&#xff0c;将这…

Velocity模板引擎——若依代码生成器

文章目录 快速入门准备模板数据填充运行代码 基础语法简单类型的变量获取对象类型的变量获取基础语法-循环基础语法—if判断 官网 比较擅长用于邮件&#xff0c;发票&#xff0c;web内容生成、代码生成、网页静态化 模板化的东西适合使用 当然模板引擎不止这一种&#xff0c;还…

记录|C# winform——Chart控件

目录 前言一、重点关注1.1 Chart控件效果1.2 属性1.2.0 位置讲解1.2.1 Titles——标题集合TextToolTip 1.2 .2 Series——图表序列ChartTypeLegends——图例集合 二、数据传入Chart控件2.1 如何传入数据&#xff1f;2.2 如果想限定每次展现的数据量怎么办&#xff1f; 三、标注…