相关文章推荐
礼貌的皮带  ·  Window:print() 方法 - ...·  2 年前    · 
深情的韭菜  ·  Flask ...·  3 年前    · 

返回Opencv-Python教程

原文链接:http://www.juzicode.com/archives/5380

OpenCV-Python教程:读取图像、显示、写入图像 一文介绍了怎么处理静态图像文件,这篇文件介绍怎么从相机、视频文件、动态图片文件获取图像,以及写入视频文件的方法。

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
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
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())

运行结果:

VX公众号: 桔子code / juzicode.com
cv2.version: 4.5.2
cap.isOpened(): True
cap.isOpened(): False

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

2、从动态图片获取图像

在 来看看怎么用OpenCV解构Twitter大牛jagarikin的视觉错觉图 一文中我们看到gif格式图片可以看成视频文件,也可以用VideoCapture(文件名)方法打开gif格式的图片,操作过程和上述普通的视频文件类似。

3、从相机获取图像

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

import cv2
print('VX公众号: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
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类型;

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

文件后缀编码方式
aviXVID
aviMJPG
avimp4v(小写)
mp4mp4v(小写)

编码方式需要创建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 print('VX公众号: 桔子code / juzicode.com') print('cv2.__version__:',cv2.__version__) #获取图像宽高 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()

原文链接:http://www.juzicode.com/archives/5380

扩展阅读:

  1. OpenCV-Python教程
  2. OpenCV-Python教程:读取图像、显示、写入图像
返回Opencv-Python教程原文链接:http://www.juzicode.com/archives/5380OpenCV-Python教程:读取图像、显示、写入图像一文介绍了怎么处理静态图像文件,这篇文件介绍怎么从相机、视频文件、动态图片文件获取图像,以及写入视频文件的方法。1、从视频文件获取图像使用cap = cv2.VideoCapture(‘文件名称’)构建视频文件的cap实例。cap.read()方法逐帧提取视频,每一帧为一幅图像,cap.read()方法返回的是一个.
OpenCV 2- Python 指南 此库包含使用新cv2接口的 OpenCV - Python 库的 教程 IMP-本 教程 适用于 OpenCV 3x版本。 不是 OpenCV 2x IMP-本 教程 适用于 OpenCV 3x版本。 不是 OpenCV 2x IMP-本 教程 适用于 OpenCV 3x版本。 不是 OpenCV 2x 发送任何错误报告之前,请尝试使用 OpenCV 3x的示例 这些 教程 中使用的输入数据在“数据”文件夹中给出 有关官方 教程 ,请访问: : 这仅用于检查。 可能包含很多错误,请坚持使用官方 教程 。 要从源代码构建文档, 安装狮身人面像 下载/克隆此仓库并导航到基本文件夹 运行命令: make html ,html docs将在build / html /文件夹中提供
def read_frame_from_video(video_path, image_path): video_c apt ure = cv2.VideoC apt ure(video_path) images = [] idx = 0 while True: ret, frame = video_c apt ure.read() if re...
用 OpenCV 开发难免会针对 Camera 或者是 Video 做处理,有的时候需要将画面保留下来,这个时候最佳方案是保存成一个 .avi 的文件。 OpenCV 底层是用 FFMEPG 进行多媒体开发的,所以 OpenCV 它的长项不在于此,它只是提供了这种能力而已,如果要针对多媒体文件做复杂的处理,推荐的还是 FFMEPG 专业库。 OpenCV 用来创建 视频文件 的类是 VideoWr...
OpenCV 中从 视频文件 或摄像机中捕获视频的类是VideoC apt ure。该类提供 C++ API 用于从摄像机捕获视频或读取 视频文件 。 关于视频的读操作是通过VideoC apt ure类来完成的;视频的 写 操作是通过Video Write r类来实现的。 VideoC apt ure既支持从 视频文件 读取,也支持直接从摄像机(比如计算机自带摄像头)中读取。要想 获取 视频需要先创建一个VideoC apt ure对象,VideoC apt ure对象的创建方式有以下三种: 一、创建一个捕获对象,通过成员函数open()来设定打开的
python opencv 写 视频——cv2.Video Write r() 函数原型 cv2.Video Write r() Video Write r(filename, fourcc, fps, frameSize[, isColor]) -> <Video Write r object> 参数说明: 第一个参数是要保存的文件的路径 fourcc 指定编码器 fps 要保存的视频的帧率 frameSize 要保存的文件的画面尺寸 isColor 指示是黑白画面还是彩色的画面 示例代码1
opencv -contrib- python 和 opencv - python 都是针对 OpenCV 计算机视觉库的 Python 接口。 opencv - python 是 OpenCV 的 Python 接口的官方版本,提供了基本的计算机视觉功能,包括 图像 处理、目标检测、视频分析等。 opencv -contrib- python 是 OpenCV 的 Python 扩展包,提供一些额外的计算机视觉功能。这些功能包括3D重建、特征检测、跟踪、人脸识别等。 OpenCV -contrib- python 是 OpenCV 的扩展包,在 opencv - python 的基础上添加了很多额外的功能,由 OpenCV 社区其他开发者贡献,它提供了更多的识别和跟踪算法,如SIFT、SURF等,还提供了更多的人脸检测算法,如Facedetect和Cascade_classifier等。不过,使用 OpenCV -contrib- python 需要注意版本的兼容性问题,因为其版本更新频率比 OpenCV - python 高,需要根据自己的需求来选择适合的版本。 总之, opencv -contrib- python 是 opencv - python 的扩展,提供了更多的计算机视觉功能,需要注意版本兼容性问题。用户可以根据实际需求,选择相应的版本,或者根据自己的开发需求进行选择。
CSDN-Ada助手: 嗨~好久未见你更新博文了,我们现在上线了AI创作助手哦~可为你的创作提供智能化帮助,快来试试吧~https://editor.csdn.net/md/?not_checkout=1&utmsource=blog_comment_recall,在编辑器页面右侧哦~~限免!! 同时我们为您准备了一份回归奖励,快来看看吧https://activity.csdn.net/creatActivity?id=10430&utmsource=blog_comment_recall Tesseract-OCR5.0软件安装和语言包安装(Windows系统) Joker clown: 语言包下不了咋