使用Opencv-python库读取图像、本地视频和摄像头实时数据
Python中使用OpenCV读取图像、本地视频和摄像头数据很简单,
首先需要安装Python,然后安装Opencv-python库
pip install opencv-python
然后在PyCharm或者VScode等IDE中输入对应的Python代码
一、使用opencv-python读取图像
比如说我们要显示上面这幅数字图像处理中的lena.jpg
这幅图像,读取的python代码如下所示:
import cv2
# Load an image using imread
img = cv2.imread("images/lena.jpg")
# img = cv2.imread("Resources/test.png")
# Display image
cv2.imshow("Lena image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
在Python中运行结果如下:
使用opencv-python读取本地视频
Opencv-python在线文档中有关于的Python示例代码:https://docs.opencv.org/4.9.0/dd/d43/tutorial_py_video_display.html
import numpy as np
import cv2 as cv
cap = cv.VideoCapture('vtest.avi')
while cap.isOpened():
ret, frame = cap.read()
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', gray)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()
视频资源可以到https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/Resources/test_video.mp4下载
相关的显示本地视频的Python代码如下:
import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture("Resources/test_video.mp4")
while True:
success, img = cap.read()
img = cv2.resize(img, (frameWidth, frameHeight))
cv2.imshow("Result", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
相应的运行结果如下图所示:
三、使用opencv-python读取摄像头数据并实时显示
使用opencv-python读取摄像头数据是非简单,opencv-python文档tutorial_py_video_display里面有对应的示例代码,如下:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# Capture frame-by-frame
ret, frame = cap.read()
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
# Our operations on the frame come here
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# Display the resulting frame
cv.imshow('frame', gray)
# 等待1毫秒,如果用户按下q键则退出循环
if cv.waitKey(1) == ord('q'):
break
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()
我本地读取摄像头数据并显示的python代码如下:
import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(0)
# cap.set(3, frameWidth)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, frameWidth)
# cap.set(4, frameHeight)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, frameHeight)
# cap.set(10, 50)
cap.set(cv2.CAP_PROP_BRIGHTNESS, 50)
while True:
success, img = cap.read()
cv2.imshow("Result", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
运行结果如下图所示:
参考资料
相关文章
Go 是否有三元运算符?Rust 和 Python 是怎么做的?
本文主要就 Go 中三元运算符展开讨论,从简单if-else语句、到基于匿名函数的单行表达式、及泛型抽象 If 函数等方式来实现类似的功能。当然,我没有建议使用这些方式,在没有内置支持的情况下,if-else的写法就挺好的。Go 中如何实现三元运算符?Rust 和 Python 是怎么做的?
编程日记 2024/02/21 09:46:19
Python3基础之import和from import的用法和区别
一个 python 的文件就叫做模块(module),如 xxx.py。模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。
编程日记 2024/02/20 22:34:44
Python和Java的区别(不断更新)
运行效率:一般来说,Java的运行效率要高于Python,这主要是因为Java是编译型语言,其代码在执行前会进行预编译,而Python是解释型语言,边解释边执行。而Python没有类似的强大虚拟机,但它的核心是可以很方便地使用C语言函数或C++库,这使得Python可以轻松地与底层硬件进行交互。**类型系统:**Java是一种静态类型语言,所有变量需要先声明(类型)才能使用,且类型在编译时就已经确定。总的来说,Python和Java各有其优势和特点,选择哪种语言取决于具体的项目需求、开发环境以及个人偏好。
编程日记 2024/02/11 20:37:25
梯度是什么,为什么联邦学习传递这个就可以更新模型?
梯度是数学和机器学习领域中的一个基本概念,它表示的是一个函数在给定点处沿着不同方向的变化率或斜率。在多维空间中,梯度是一个向量,指向函数增长最快的方向,并且其大小表示在该方向上函数增长的速度。
编程日记 2024/02/08 18:09:30
VSCode python插件:找不到自定义包导致语法解析失败
vscode的默认python插件可没法聪明到根据这句话去找这个包,这就会导致后续代码中使用了这个库的部分无法享受自动补全、语法高亮等功能的便利性
编程日记 2024/02/07 09:14:30
第5课 使用FFmpeg将rtmp流再转推到rtmp服务器
9.转码推流:循环读取输入文件的数据包,使用av_read_frame()函数读取数据包,然后使用avcodec_send_frame()函数发送数据包给编码器进行编码,再使用avcodec_receive_packet()函数接收编码后的数据包,最后使用av_interleaved_write_frame()函数将编码后的数据包写入输出流。5.添加输出流:根据输入文件的流信息,使用avformat_new_stream()函数创建输出流,并将其添加到输出上下文中。
编程日记 2024/02/07 09:12:54
解决Linux环境下gdal报错:ERROR 4: `/xxx.hdf‘ not recognized as a supported file format.
题外话:我发现linux系统和Windows系统下面,库的版本是有差异的。比如我的本机Windows上装的是gdal3.2.3和numpy1.19.1,linux服务器上装的却是gdal3.0.2和numpy1.21.5。这个是很常见的回复,网上许多回答都说低版本的 gdal 不支持 hdf5,让你重装高版本的gdal。我之前用pip安装了whl,暴力装上了,但用的时候就会有问题。安装了不冲突的gdal之后,就成功打开文件啦~一开始我是抱着试试的心态,用conda,不用pip,重新安装了一下我的gdal。
编程日记 2024/01/30 14:36:06
新能源汽车智慧充电桩管理方案:环境监测与充电安全多维感知
通过接入各类环境检测传感器及应用,不仅提高了充电桩及站点的管理效率和维护质量,还为电动汽车用户提供了更加安全、便捷的充电服务。
编程日记 2024/01/25 16:20:19
详解动态网页数据获取以及浏览器数据和网络数据交互流程-Python
动态网页是一种在用户浏览时实时生成或变化的网页。。相比之下,动态网页可以根据用户的互动、请求或其他条件在浏览器端或服务器端生成新的内容。而且现在的网页一般都是采用前后端分离的架构,前端负责展示和用户交互,后端负责数据处理。这种架构使得前端可以更加灵活地实现动态内容的加载和展示。所以说以后想要获取到数据,动态网页数据获取会成为我们主流获取网页数据的技术。所以在动态网页数据获取这方面我们需要下足功夫了解动态网页数据交互形式、数据存储访问模式等方方面面的知识,我们才好更加灵活的获取到数据。
编程日记 2024/01/13 17:46:53
学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python 可以用于数据库应用程序。最流行的 NoSQL 数据库之一是 MongoDB MongoDB MongoDB 将数据存储在类似 JSON 的文档中,使数据库非常灵活和可扩展。 您可以在 MongoDB 官网 上下载免费的 MongoDB 数据库 PyMongo Python 需要一个 M
编程日记 2024/01/13 10:25:09
网络知识-以太网技术的发展及网络设备
大家都被互联网上各种各样的内容、技术闪亮了眼睛,没有太多人去了解比较底层的一些网络技术。面试的时候,我也问过很多技术人员,对以太网是否了解,了解多少?但是很多人都知之甚少!但是,在我们实际工作碰到问题、分析问题、定位问题、解决问题的时候,又必须要了解这方面的知识。以太网最初到现在的主要设备包括集线器、中继器、网桥、交换机。以太网目前应用在很多行业,在视频监控、安防、视频会议等领域都有很广泛的应用。
编程日记 2024/01/07 09:49:43
C# Onnx Chinese CLIP 通过一句话从图库中搜出来符合要求的图片
C# Onnx Chinese CLIP 通过一句话从图库中搜出来符合要求的图片
编程日记 2024/01/06 21:02:14
详解静态网页数据获取以及浏览器数据和网络数据交互流程-Python
在网站设计领域,基于纯HTML格式构建的网页通常定义为静态网页,这种类型的网页是早期网站建设的主要形式。对于网络爬虫来说,抓取静态网页中的数据相对较为简单,因为所需的所有信息都直接嵌入在网页的HTML代码里。然而,对于那些利用AJAX技术动态加载数据的网页,其数据并不总是直接出现在HTML代码中,这对爬虫的抓取工作造成了一定的难度。在静态网页的数据抓取过程中,Requests库显示出其卓越的实用性。这个库不仅功能全面,而且操作简洁直观。
编程日记 2024/01/05 10:50:34
OpenCV:计算机视觉的强大工具库
计算机视觉的强大工具库一、什么是OpenCV?二、OpenCV的功能和特点三、OpenCV的应用领域四、OpenCV在实践中的重要性五、OpenCV的未来展望
编程日记 2024/01/02 21:03:17
Jupyter Notbook+cpolar内网穿透实现公共互联网访问使用数据分析工作
在数据分析工作中,使用最多的无疑就是各种函数、图表、代码和说明文档,这些复杂的内容不仅让使用的人头晕脑胀,也让普通的聊天工具一脸蒙圈。沟通工具不给力,就没法协同办公,可数据分析又离不开多人配合,所以Jupyter Notebook就成为大部分数据工作人员的必备工具。正如之前所说,Jupyter Notebook很适应复杂内容的沟通,因此现在也在机器学习、深度学习和教育工作中获得广泛应用。但Jupyter Notebook也有缺陷,就是被局限在局域网范围。
编程日记 2023/12/29 09:56:39
在Jetpack Compose中使用ExoPlayer实现直播流和音频均衡器
ExoPlayer与Media3的能力结合,为Android应用程序播放多媒体内容提供了强大的解决方案。在本教程中,我们将介绍如何设置带有Media3的ExoPlayer来支持使用M3U8 URL进行直播流。此外,我们还将探讨如何集成音频均衡器,为用户提供个性化的音频体验。使用ExoPlayer进行直播流涉及到利用ExoPlayer库的强大能力,在互联网上实时播放多媒体内容。在这个探索中,我们将深入了解ExoPlayer如何实现无缝播放直播流URL的复杂性,为用户提供沉浸式体验。
编程日记 2023/12/27 12:04:49
如何在Spring Boot中优雅地进行参数校验
在Java中,注解(Annotation)是一种代码标记,通常用于提供元数据,这些元数据可以被编译器或运行时环境使用。这些注解通常用于框架和库中,以实现更加灵活和可配置的代码。
编程日记 2023/12/25 10:15:17
大数据告诉你新能源汽车哪家强?
随着双碳战略的提出和电池技术、电动机技术等的不断进步,新能源汽车最近几年势头很猛,借着一份汽车销售数据一起来了解一下新能源汽车目前的市场情况,大家买电车的说不定可以用上,毕竟这可是。
大数据 2023/12/24 22:34:30
Python使用多线程解析超大日志文件
使用Python的多线程技术可以有效地提高处理超大日志文件的效率。但在实际应用中需要注意多线程编程中的各种问题,如线程管理、资源管理、错误处理等。通过合理的优化和调整可以提高程序的性能和稳定性。
编程日记 2023/12/24 11:16:35
基于Python Django的内容管理系统Wagtail CMS部署与公网访问
Wagtail是一个用Python编写的开源CMS,建立在Django Web框架上。Wagtail是一个基于Django的开源内容管理系统,拥有强大的社区和商业支持。它专注于用户体验,并为设计人员和开发人员提供精确控制。它能快速实现页面的表达,对于我这种对新实现的功能想要找到地方进行展示,但前端能力又不太行的同学基于django 一直会对django的稳定版本进行支持Wagtail由开发人员为开发人员构建。
编程日记 2023/12/19 13:27:23
opencv中叠加Sobel算子与Laplacian算子实现边缘检测
openCV进行边缘检测时,可以将不同算法结合起来,达到更好的效果,本例使用Sobel算子 结合 Laplacian算子 实现图像边缘检测。
编程日记 2023/12/17 23:27:21
Python将列表中的数据写入csv并正确解析出来
用Python做数据处理常常会将数据写到文件中进行保存,又或将保存在文件中的数据读出来进行使用。通过Python将列表中的数据写入到csv文件中很多人都会,可以通过Python直接写文件或借助pandas很方便的实现将列表中的数据写入到csv文件中,但是写进去以后取出有些字段会有变化有些坑还是要避免。本文通过实例来介绍如何将列表中的数据写入文件如csv并正确解析出来使用。
编程日记 2023/12/16 21:53:11
ubuntu18.04安装opencv-4.5.5+opencv_contrib-4.5.5
解压opencv-4.5.5和opencv_contrib-4.5.5,并将解压后的放到opencv-4.5.5文件夹下。二、在opencv-4.5.5文件夹下新建build。三、在/etc/ld.so.conf中添加配置。四、修改bash.bashrc文件。一、安装opencv依赖。
编程日记 2023/12/08 21:32:17
【Java 基础篇】Java TCP通信详解
本文介绍了Java中如何使用TCP协议进行网络通信,包括TCP的基础知识、TCP编程的基本步骤、创建TCP服务器和客户端、数据传输等内容。通过学习本文,您可以开始使用TCP协议来构建自己的网络应用程序,实现可靠的数据传输。希望本文能够帮助您更好地理解和应用Java中的TCP通信。
编程日记 2023/09/24 00:01:55
【Java 基础篇】Java网络编程实战:P2P文件共享详解
P2P(Peer-to-Peer)文件共享是一种分布式计算模型,其中每个计算机或设备都可以充当客户端和服务器。这意味着每台计算机都可以上传和下载文件,而不仅仅是从一个中心服务器获取文件。P2P文件共享有许多优势,包括更快的下载速度、更高的可用性和更好的容错性。P2P文件共享是一种强大的分布式文件共享模型,可以提供更快的下载速度和更好的可用性。通过使用Java网络编程,我们可以实现P2P文件共享,让不同的客户端之间可以方便地共享文件。
编程日记 2023/09/24 00:01:45