机器视觉学习(二)—— 显示图像和视频

一、获取图像

要使用OpenCV获取图像,你需要安装OpenCV库并学习基本的OpenCV函数。下面是一些获取图像的基本步骤:

  1. 导入必要的库:import cv2

  2. 读取图像:image = cv2.imread("image.jpg") 这将从指定路径读取图像,并将其存储在名为image的变量中。

import cv2# 读取图像
image = cv2.imread("image.jpg")

请注意,上述代码中的image.jpg是指定图像的路径。您需要将其替换为您自己的图像路径。

cv2.imread()函数是OpenCV库中的一个函数,用于读取图像文件。

语法格式: image = cv2.imread(filename, flags)

参数说明:

  • filename:要读取的图像文件路径,可以是绝对路径或相对路径。
  • flags:读取图像的方式。可选参数,默认值为 cv2.IMREAD_COLOR。常用的取值有:
    • cv2.IMREAD_COLOR:以RGB颜色模式读取图像,忽略透明度通道。
    • cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。
    • cv2.IMREAD_UNCHANGED:读取图像的原始模式,包括透明度通道。
图像读取:cv2.imread(img_path,flag)img_path:   图片的路径,即使路径错误也不会报错,但打印返回的图片对象为 Noneflag:   cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1cv2.IMREAO_GRAYSCALE,按灰度模式读取图像,也可以传入 0cv2.IMREAO_UNCHANGEO,读取图像,包括其 alpha通道,也可以传入 -1

返回值:

  • image:读取到的图像数据,以numpy数组的形式返回。

示例代码:

import cv2# 以RGB颜色模式读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)# 以灰度模式读取图像
gray_image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)# 以原始模式读取图像
raw_image = cv2.imread('image.jpg', cv2.IMREAD_UNCHANGED)

二、显示图像

要在OpenCV中显示图像,可以使用cv2.imshow()函数。

图像显示:cv2.imshow(winname,img)winname:        窗口名称img:            显示的图像

以下是一个示例代码,演示如何显示图像:

import cv2# 读取图像
image = cv2.imread('image.jpg')# 创建窗口并显示图像
cv2.imshow('Image', image)# 等待用户按下任意键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

请将上述代码中的image.jpg替换为您要显示的图像的路径和文件名。该代码将创建一个名为"Image"的窗口,并在该窗口中显示图像。用户需要按下任意键后窗口才会关闭。

imread()函数用于加载图像,需要传入图像的文件路径。然后使用imshow()函数显示图像,在窗口中显示的标题为"Image"。最后使用waitKey(0)等待用户按下任意键,然后使用destroyAllWindows()关闭显示图像的窗口。

注意:cv2.imshow()函数可以显示BGR格式的图像。如果图像的颜色空间是RGB,需要在显示前将其转换为BGR格式。

此外,还可以使用cv2.namedWindow()函数创建一个具有自定义名称的窗口,以及cv2.resizeWindow()函数调整窗口的大小。

三、显示视频流

下面是使用OpenCV库显示视频流的示例代码:

import cv2
cap = cv2.VideoCapture(0)  # 0表示默认摄像头,如果有多个摄像头可以尝试使用1、2、3...
while True:ret, frame = cap.read()  # 读取视频流的一帧cv2.imshow('Video', frame)  # 显示当前帧if cv2.waitKey(1) & 0xFF == ord('q'):  # 按下q键退出循环break
cap.release()  # 释放摄像头
cv2.destroyAllWindows()  # 关闭窗口

这段代码首先创建了一个VideoCapture对象来读取视频流。然后在一个循环中不断读取每一帧,并使用imshow()函数显示当前帧。通过waitKey函数等待用户按下q键来退出循环。最后记得释放摄像头资源和关闭窗口。

较复杂的程序:

import cv2 as cvcam = cv.VideoCapture("xin.avi")                    # cam = cv.VideoCapture("D:\音乐剪辑\love 3.mp4")
# cam.set(3,4080),cam.set(4,3060)                   # 来把宽和高改成 4080x3060
while(cam.isOpened()):              # 用于判断 cap是否正常初始化,返回布尔值,正常则返回 True ret,frame = cam.read()                  cv.imshow("Video",frame)if cv.waitKey(1)==27:           # 等候 1ms,播放下一帧      if cv.waitKey(60)==27:        breakcam.release()
cv.destroyAllWindows()

 四、相关知识拓展

"""OpenCV 查看图像调整图像大小图像色彩空间(BGR,HSV)
""""""
图像读取:cv2.imread(img_path,flag)img_path:   图片的路径,即使路径错误也不会报错,但打印返回的图片对象为 Noneflag:   cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1cv2.IMREAO_GRAYSCALE,按灰度模式读取图像,也可以传入 0cv2.IMREAO_UNCHANGEO,读取图像,包括其 alpha通道,也可以传入 -1图像显示:cv2.imshow(winname,img)winname:        窗口名称img:            显示的图像图像保存:cv2.imwrite(img_path_name,img,num)img_path_name:          保存的文件名img:                    文件对象num(可选):              针对特定的格式对于 JPEG,其表示的是图像的质量,用 0~100的整数表示,默认为 95对于 PNG,第三个参数表示的是压缩级别,默认为 3图像性质:img.shape   (打印图片的长,宽和颜色通道数;灰度图的颜色通道数为 1,不显示)img.size    (打印图片的像素数目)img.dtype   (打印图片的格式)图像缩放:cv2.resize(img,dsize,fx,fy,interpolation)img                 代表需要缩放的原始图像dsize               代表输出图像大小 (长,宽)fx,fy               代表水平方向和垂直方向的缩放比例interpolation       代表插值方式INTER_NEAREST               最邻近插值INTER_LINEAR                双线性插值 (默认)INTER_AREA                  区域插值INTER_CUBIC                 4x4 像素邻域内的双立方插值INTER_LANCZOS4              8x8 像素邻域内的Lanczos插值"""

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

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

相关文章

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的?

什么是事件冒泡?Littlevgl中的事件冒泡是怎么样的? 事件冒泡(Event Bubbling)是指当一个元素上的事件被触发时,该事件会从最底层的元素开始逐级向上传播,直到最顶层的元素(通常是文档对象)被触发。 ​ 例如我们点击一个按钮时,…

前后端分离项目环境搭建

1. 使用到的技术和工具 springboot vue项目的搭建 工具 idea,mavennodejs 2. 后端框架搭建 利用maven创建springboot项目 3. 前端项目搭建 1. 安装相关工具 nodejs: 一个开源、跨平台的 JavaScript 运行时环境,可以理解成java当中需要…

fly-gesture-unlock 手势解锁库

最近要实现前端九宫格手势解锁功能,到 github 和 gitee 上没有找到质量比较好的库,自己对这个功能也是蛮感兴趣的,所以做了这个开源库,用于实现手势解锁功能,可以帮助大家快速完成业务逻辑,提供了完整的 DE…

Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言 上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了,我们知道Prompt工程是指人们向生成性人工智能(AI)服务输入提示以生成文本或图像的过程中,对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数…

python基于flask考研学习交流系统30vy7附源码django

考研在线学习与交流平台根据实际情况分为前后台两部分,前台部分主要是让用户使用的,包括用户的注册登录,首页,课程信息,在线讨论,系统公告,后台管理,个人中心等功能;后台…

Redis 中的全局命令

查看所有键 keys * keys命令会遍历所有键, 所以它的时间复杂度是O(n) 查看键总数 dbsize dbsize命令在计算键总数时不会遍历所有键, 而是直接获取Redis内置的键总数变量, 所以dbsize命令的时间复杂度是O&#xff…

Mysql锁与MVCC

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 exlpain字段解析ACID的原理日志引擎整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁: 乐观锁(Optimistic Locking):假设并发操作时不会发…

CODE001

GPIO通用输入输出端口 1.可以配置八种输入输出模式 2.引脚电平0~3.3v 部分可以容忍5V 3.输出模式下可控制端口输出高低电平,用来驱动LED,蜂鸣器,模拟通信协议输出时序 4.输入模式下可读取端口的高低电平或电压,用于读取按键输入&a…

3.Python从入门到精通—Python 基础语法详细讲解-中

【30天】Python从入门到精通详解版—第二天—Python 基础语法详细讲解-中 控制流程语句条件语句循环语句 函数和模块函数模块 控制流程语句 在Python中,控制流程语句用于控制程序的执行流程,包括条件语句和循环语句。 条件语句 Python中的条件语句包括…

Database Connectivity using Python使用 Python 进行数据库连接

Introduction • The Python programming language has powerful features for database programming • Python supports various databases like MySQL, Oracle, Sybase, PostgreSQL, etc • Python also supports Data Definition Language (DDL), Data Manipulation Langua…

ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 思考: 1、cache的entry里都是有什么? 2、TLB的entry里都是有什么? 3、MMU操作…

代码简洁之道

《代码简洁之道》(Clean Code)是由Robert C. Martin所著的一本经典书籍,主要介绍了如何编写清晰、可读性高、易于维护的代码。以下是该书中的一些重要观点: 1. 命名清晰明了:变量、函数、类等命名应当清晰明了&#x…

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解

Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…

Java策略模式源码剖析及使用场景

策略模式 一、介绍二、不同的支付方式采用不同的策略三、 电商定价策略四、日志记录策略五、 压缩算法六、Java 中的 Arrays.sort() 方法,不同的排序策略进行排序七、Spring 中的 ResourceLoader 类,不同的资源位置采用不同的加载策略 一、介绍 策略模式是一种行为型设计模式,…

计算机行业在数字经济时代的角色与数字化转型之路

目录 前言1 数字经济时代下的计算机行业角色与定位1.1 数字经济支撑者1.2 创新引领者1.3 产业融合者 2 数字化转型对计算机行业的影响与挑战2.1 技术更新换代的压力2.2 人才培养与流动的问题2.3 数据隐私与安全的挑战 3 数字化转型如何提升行业竞争力3.1 提高生产效率与优化产品…

【Java】获取手机文件名称补充

本地的 ADB 工具路径指的是你电脑上安装的 Android Debug Bridge(ADB)工具的路径。ADB 是 Android SDK 中的一个工具,用于与连接到计算机上的 Android 设备进行通信。你需要确保 ADB 已正确安装,并知道其在你计算机上的位置。 通…

Prometheus 监控告警配置

文章目录 一、告警通知1.邮件通知2.钉钉通知2.1.获取钉钉机器人webhook2.2.prometheus-webhook-dingtalk2.3.配置信息2.4.自定义模板 3.自定义 二、告警规则1.Prometheus2.Linux3.Docker4.Nginx5.Redis6.PostgreSQL7.MySQL8.RabbitMQ9.JVM10.Elasticsearch 开源中间件 # Prome…

odoo中使用domain基础操作

Odoo中的domain是一个用于筛选记录的条件列表,它通常用于搜索、过滤和定义视图中可见记录的规则。Domain由一系列的元组组成,每个元组定义了一个筛选条件。这些条件可以是简单的字段比较,也可以是更复杂的逻辑组合。 基本语法 Domain的基础…

模拟无人驾驶汽

下面是一个简单的Python代码示例,用于模拟无人驾驶汽车的自动驾驶功能。 import timeclass Car:def __init__(self):self.speed 0self.heading 0def drive(self):while True:self.update_sensors()self.process_sensors()self.control_car()self.update_car()tim…

CentOS搭建NAS服务器并使用

CentOS搭建NAS服务器并使用 文章目录 前言一、配置NAS服务器安装 NFS 服务:启动 NFS 服务:使 NFS 服务在系统启动时自动启动: 二、挂载服务器三、常见错误以及解决方案1、mount.nfs: No route to host2、mount.nfs: access denied by server …