百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

OpenCV-Python教程:从视频文件、相机获取图像、写视频文件

off999 2024-12-03 00:10 18 浏览 0 评论

1、从视频文件获取图像

使用cap = cv2.VideoCapture(‘文件名称’)构建视频文件的cap实例。cap.read()方法逐帧提取视频,每一帧为一幅图像,cap.read()方法返回的是一个二元组,下标0的元素值为True或False,如果为Flase表示读取文件完成。下标1的元素为图像对象,也是一个numpy数组类型的数据。cap.isOpened()用来检查cap实例是否已打开。cap.release()释放实例。下面这个例子中读取视频文件并显示,达到播放的效果,同时加入了waitKey()返回值的判断,输入按键’Q’或者’q’就可以退出循环。在这里waityKey()返回的数值和0xff相与后再和字符的ord()值比较,是为了规避某些系统中waitKey()返回的数值在高字节为非0值的情况。

import cv2

cap = cv2.VideoCapture('..\\vtest.avi')

while cap.isOpened():
    ret, img = cap.read()
    if ret is not True:
        print("读取完成,退出")
        break      
    #处理img
    cv2.imshow('vedio', img)
    
    #检查按键
    key = cv2.waitKey(20) & 0xff
    if  key == ord('q') or key == ord('Q') :
        break
        
print('cap.isOpened():',cap.isOpened())
cap.release()
print('cap.isOpened():',cap.isOpened())

运行结果:

cap.isOpened(): True
cap.isOpened(): False

从运行结果看,cap.release()前cap.isOpened()的返回值一直为True。

2、从动态图片获取图像

使用VideoCapture(文件名)方法打开gif格式的图片,操作过程和上述普通的视频文件类似。

3、从相机获取图像

打开相机需要用相机的设备编号(数值型整数)作为入参传入VideoCapture(相机编号),比如cap = cv2.VideoCapture(0)构建编号为0的相机访问实例,第2台相机则传入1,以此类推,后续步骤的处理方法和读取视频文件一样。

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, img = cap.read()
    if ret is not True:
        print("读取失败,退出")
        break      
    #处理img
    cv2.imshow('vedio', img)
    
    #检查按键
    key = cv2.waitKey(20) & 0xff
    if  key == ord('q') or key == ord('Q') :
        break
        
print('cap.isOpened():',cap.isOpened())
cap.release()
print('cap.isOpened():',cap.isOpened())

4、写入视频文件

写视频文件需要创建VideoWriter对象,依次传入4个参数:

  • 第1个为文件名称;
  • 第2个为编码方式,其中编码方式和文件名称后缀有对应关系;
  • 第3个参数为每秒写入的帧数,参考数值为25,符合人眼习惯;
  • 第4个参数是图像大小,int类型;

常用的文件名称后缀和编码方式的对应关系有:

文件后缀

编码方式

avi

XVID

avi

MJPG

avi

mp4v(小写)

mp4

mp4v(小写)

编码方式需要创建VideoWriter_fourcc对象,比如可以用下面的2种方式创建MJPG类型的编码:

fourcc=cv2.VideoWriter_fourcc('M','J','P','G')
fourcc=cv2.VideoWriter_fourcc(*'MJPG')

图像大小可以通过cat.get(propId)方法获取,但是该方法获取的是float类型,需要转换为int类型再传入VideoWriter。

cap = cv2.VideoCapture(0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) 
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = int(width)
height = int(height)

下面是一个创建XVID、MJPG、mp4v等3种编码方式视频文件的例子:

import cv2
 
#获取图像宽高
cap = cv2.VideoCapture(0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) 
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = int(width)
height = int(height)
print(width,height)
 
#创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 25.0, (width,  height))
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out2 = cv2.VideoWriter('output2.avi', fourcc, 25.0, (width,  height))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out3 = cv2.VideoWriter('output3.mp4', fourcc, 25.0, (width,  height))

while cap.isOpened():   
    ret, img = cap.read()
    print(img.shape)
    if ret is not True:
        print("读取失败,退出")
        break      
    #处理img
    cv2.imshow('vedio', img)
    out.write(img)
    out2.write(img)
    out3.write(img)

    #检查按键
    key = cv2.waitKey(1) & 0xff
    if  key == ord('q') or key == ord('Q') :
        break
 
cap.release()
out.release()
out2.release() 
out3.release()

相关推荐

SPC相关的计算用excel和python实现【源码下载】

做SPC分析涉及到很多计算,比如CPK、PPK、概率图、PPM等等,网上很多公式,但具体实现却不是那么容易的。我们整理了这些用excel和python实现的代码。包括但不限于以下的内容:SPC分析中的...

Python学不会来打我(34)python函数爬取百度图片_附源码

随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...

django python数据中心、客户、机柜、设备资源管理平台源码分享

先转发后关注,私信“资源”即可免费获取源码下载链接!本项目一个开源的倾向于数据中心运营商而开发的,拥有数据中心、客户、机柜、设备、跳线、物品、测试、文档等一些列模块的资源管理平台,解决各类资源集中管理...

熬夜也值得学习练手的108个Python项目(附源码),太实用了!

现在学编程的人越来越多,Python因为简单好上手、功能又强大,成了很多人的首选。不管是做数据分析、人工智能,还是写网络程序、自动化脚本,Python都能派上用场。而且它诞生的时间比网页还早,作为...

这五个办公室常用自动化工具python源码,复制代码就能用

办公室自动化现在能看这文章的恐怕大部分都是办公室久坐工作者,很多都有腰肌劳损、肩周炎等职业病,难道就不能有个工具缓解一下工作量吗?那么恭喜你点进了这篇文章,这篇文章将使用python直接实现五个常...

将python源代码封装成window可执行程序教程

将python源代码封装成window可执行程序教程点击键盘win+r打开运行框在运行框中输入cmd,进入到命令行。在命令行中输入piplist去查看当前电脑中所有的库检查是否有pyinstall...

Python 爬虫如何爬取网页源码?(爬虫获取网页源代码)

下面教大家用几行代码轻松爬取百度首页源码。什么是urllib?urllib库是Python内置的HTTP请求库,它可以看做是处理URL的组件集合。urllib库包含了四大模块,具体如下:urllib....

Python RPC 之 Thrift(python是做什么的)

thrift-0.12.0python3.4.3Thrift简介:Thrift是一款高性能、开源的RPC框架,产自Facebook后贡献给了Apache,Thrift囊括了整个RP...

用Python编写FPGA以太网MAC(附源码下载方式)

来源:EETOP作者:ccpp123略作了解后发现,MyHDL不是高层次综合,它实际上是用Python的一些功能实现了一个Verilog仿真器,能对用Python写的仿Verilog语言进行仿...

python爬虫常用工具库总结(python爬虫工具下载)

说起爬虫,大家可能第一时间想到的是python,今天就简单为大家介绍下pyhton常用的一些库。请求库:实现基础Http操作urllib:python内置基本库,实现了一系列用于操作url的功能。...

手把手教你使用scrapy框架来爬取北京新发地价格行情(理论篇)

来源:Python爬虫与数据挖掘作者:霖hero大家好!我是霖hero。上个月的时候,我写了一篇关于IP代理的文章,手把手教你使用XPath爬取免费代理IP,今天在这里分享我的第二篇文章,希望大家可以...

2025年Python爬虫学习路线:第1阶段 爬虫基础入门开始

这个阶段的目标是让你熟悉Python的基础知识、了解HTTP请求和HTML是如何工作的,并最终完成你的第一个爬虫小项目——抓取名言!按照计划,我们首先要打好Python基础。Python就像是我们要...

如何入门 Python 爬虫?(python零基础爬虫)

1.很多人一上来就要爬虫,其实没有弄明白要用爬虫做什么,最后学完了却用不上。大多数人其实是不需要去学习爬虫的,因为工作所在的公司里有自己的数据库,里面就有数据来帮助你完成业务分析。什么时候要用到爬虫呢...

突破爬虫瓶颈:Python爬虫核心能力提升与案例实操

技术控必看!Python爬虫高手进阶全攻略,解锁数据处理高阶玩法在数字化时代,Python爬虫早已成为数据探索者手中的得力工具。从基础的网页抓取到复杂的数据处理,每一次技术升级都能带来新的突破。本文将...

网络爬虫开源框架(网络爬虫的框架)

目前开源爬虫下载框架是百花齐放,各个编程语言都有,以下主要介绍其中重要的几个:1)python:scrapy,pyspider,gcrawler2)Java:webmagic,WebCollector...

取消回复欢迎 发表评论: