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

news/2024/5/30 17:53:14/文章来源:https://blog.csdn.net/qq_74375828/article/details/136556566

一、获取图像

要使用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.luyixian.cn/news_show_1006369.aspx

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

相关文章

【机器学习】一文掌握逻辑回归全部核心点(上)。

逻辑回归核心点-上 1、引言2、逻辑回归核心点2.1 定义与目的2.2 模型原理2.2.1 定义解析2.2.2 公式2.2.3 代码示例 2.3 损失函数与优化2.3.1 定义解析2.3.2 公式2.3.3 代码示例 2.4 正则化2.4.1 分类2.4.2 L1正则化2.4.3 L2正则化2.4.4 代码示例 3、总结 1、引言 小屌丝&#…

Java高级编程—泛型

文章目录 1.为什么要有泛型 (Generic)1.1 泛型的概念1.2 使用泛型后的好处 2.在集合中使用泛型3.自定义泛型结构3.1 自定义泛型类、泛型接口3.2 自定义泛型方法 4.泛型在继承上的体现5.通配符的使用5.1 基本使用5.2 有限制的通配符的使用 1.为什么要有泛型 (Generic) Java中的…

uniapp h5 部署

uniapp 配置 服务器文件路径 打包文件结构 //nginx 配置 server {listen 8300;server_name bfqcwebsiteapp;charset utf-8;#允许跨域请求的域,* 代表所有add_header Access-Control-Allow-Origin *;#允许带上cookie请求add_header Access-Control-Allow-C…

【Pytorch】进阶学习:深入解析 sklearn.metrics 中的 classification_report 函数---分类性能评估的利器

【Pytorch】进阶学习:深入解析 sklearn.metrics 中的 classification_report 函数—分类性能评估的利器 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合…

Covalent Network (CQT) 通过统一 API 集成,为 Gnosis Chain 的 AI 潜力赋能

作为一个为超 225 个链提供服务的领先多链索引器,Covalent Network (CQT) 正在与知名的 EVM 区块链基础设施提供者 Gnosis Chain 展开一项激动人心的合作。这一战略合作象征着先进的实时数据索引技术的集成,包括 Covalent Network (CQT) 的统一 API 和 G…

前端项目,个人笔记(一)【定制化主题 + 路由设计】

目录 1、项目准备 1.1、项目初始化 1.2、elementPlus按需引入 注:使用cnpm安装elementplus及两个插件,会报错:vueelement-plus报错TypeError: Cannot read properties of null (reading isCE ) ,修改: 测试&#…

一站式解决方案:uni-app条件编译及多环境配置,appid动态修改攻略!

前言 这篇文章主要介绍uniapp在Hbuilderx 中,通过工程化,区分不同环境、动态修改小程序appid以及自定义条件编译,解决代码发布和运行时手动切换到问题。 背景 在企业级的应用中,通常会分为,开发、联调、生产等多个环…

基于CNN的图像超分辨率

单图像超分辨率 (Single image super resolution,SR) 是计算机视觉中的一个经典问题, 其目的是从单个低分辨率图像中恢复高分辨率图像。这个问题本质上是不适定的,因为对于任何给定的低分辨率像素都存在解决方案的多重性。换句话说&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件,用于根据指定日期范围创建日期滑动选择器。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

Github 2024-03-13 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-13统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目2Python项目2非开发语言项目2HTML项目1CSS项目1Dart项目1TypeScript项目1Go项目1JavaScript项目1《Hello 算法》:动画图解、一键运行的…

利用“定时执行专家”软件的25种任务与12种触发器,提升IT系统管理自动化水平

在IT系统管理中,自动化是提高工作效率、减少人为错误的关键。而《定时执行专家》这款软件,以其强大的功能、易用性和毫秒级的执行精度,成为了IT系统管理员的得力助手。今天,我们就来探讨一下如何利用这款软件的25种任务类型和12种…

Node.js入门基础—day01

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:给自己一个梦想,给世界一个惊喜。 🎅**学习目标: 坚持每一次的学习打卡 文章目录 初识node.js什…

vivo统一接入网关VUA转发性能优化实践

作者:vivo 互联网服务器团队 - Qiu Xiangcun 本文将探讨如何通过使用Intel QuickAssist Technology(QAT)来优化VUA的HTTPS转发性能。我们将介绍如何使用QAT通过硬件加速来提高HTTPS转发的性能,并探讨QAT在不同应用场景中的表现。最…

Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

目录 JavaEE-HTTP-Servlet&路由&周期 JavaEE-数据库-JDBC&Mybatis&库 思维导图 Java知识点: 功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等. 框架…

数据结构与算法——排序(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

探索Java高并发编程之道:理论与实践

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 简介 随着互联网和信息技术的快速发展&#x…

使用Nginx进行负载均衡

什么是负载均衡 Nginx是一个高性能的开源反向代理服务器,也可以用作负载均衡器。通过Nginx的负载均衡功能,可以将流量分发到多台后端服务器上,实现负载均衡,提高系统的性能、可用性和稳定性。 如下图所示: Nginx负…

【JavaScript 漫游】【036】CORS 通信总结

文章简介 CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨域的服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。 本篇文章为【JavaScript 漫…

拼图小游戏制作教程:用HTML5和JavaScript打造经典游戏

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

mysql中的非空间数据导入sqlserver中空间化

以下操作都在Navicat Premium 15软件中操作 1、mysql导出数据 以导出csv为例 不修改导出路径的话默认就是在桌面 设置编码UTF-8 这边还是默认,最好不要修改,如果文本识别符号为空,导入的时候可能字段会错乱 开始即可 2、导入sqlserver数据库中