python实现拍照,录像,剪辑,分帧等操作
来源:互联网 发布:ubuntu c语言开发工具 编辑:程序博客网 时间:2024/06/02 07:17
在图像处理中,我们经常需要通过设备对场景进行录像,拍照,以及视频处理等工作,本文将具体介绍一下利用python 实现一下这些功能。
配置环境
首先安装python-opencv ,在前面的文章我已经介绍过了,只需要一行命令即可
sudo apt-get install python-opencv
安装完openv 之后,我们即可操作了。
摄像头获取:
在这里我的VideoCapture(1),由于小博的摄像头出了问题,用的外接的USB摄像头,一般这个参数为0(大家要注意一下),在linux系统下,大家可以使用命令
ls /dev/video*
查看一下,会显示/dev/video..你的摄像头编号,将编号填入cv2.videoCapture() 括号里即可
#!/usr/bin/python# -*- coding: utf-8 -*-import cv2import numpy as npcap=cv2.VideoCapture(1) #此处填入摄像头while(1): ret,frame=cap.read() #get frame cv2.imshow("xiaorun",frame) if cv2.waitKey(1)&0xFF==ord('q')or ret==False: breakcap.release()cv2.destroyAllwindows()
保存
接下来我们对上述获得的图像以时间命名来进行保存,首先贴出获取摄像头图像保存的代码,我给出了必要的注释:
#!/usr/bin/python# -*- coding: utf-8 -*-import cv2import numpy as npimport time #导入时间模块c=time.time() t=time.ctime(c) 获得当前系统时间videoname=str(t)+'.avi'fourcc = cv2.cv.CV_FOURCC('M', 'P', '4', '2') # 为保存视频做准备,构建了一个对象,其中10为帧率,自己可按照需要修改out=cv2.VideoWriter(videoname,fourcc,10,(640,480)) cap=cv2.VideoCapture(1)while(1): ret,frame=cap.read() #get frame cv2.imshow("xiaorun",frame) out.write(frame) if cv2.waitKey(1)&0xFF==ord('q')or ret==False: breakcap.release()cv2.destroyAllwindows()
copy以上代码运行即可看到当前路径下你摄像头的录像了。
图片的保存
拍照功能说白了其实就是单张图像的保存,同样我们只需要对上述录像的代码做一点小小的修改即可完成拍照和录像两不误的功能
#!/usr/bin/python# -*- coding: utf-8 -*-import cv2import numpy as npimport time c=time.time() # 为保存视频做准备t=time.ctime(c)i=1videoname=str(t)+'.avi'fourcc = cv2.cv.CV_FOURCC('M', 'P', '4', '2')out=cv2.VideoWriter(videoname,fourcc,10,(640,480))cap=cv2.VideoCapture(1)while(1): ret,frame=cap.read() #get frame cv2.imshow("xiaorun",frame) if i==99: #第99帧的时候保存图像,可自行修改 cv2.imwrite('xiaorun.jpg', frame) i=i+1 out.write(frame) if cv2.waitKey(1)&0xFF==ord('q')or ret==False: breakcap.release()cv2.destroyAllwindows()
在上面的例子中完成的拍照功能,由于没有一个控制界面,我特意选择了一个if判断,在第99帧的时候触发拍照功能,所以大家可以按照需求自行修改。保存图片的格式为.jpg
视频的剪辑
在看完上面的讲解一下,大家对利用openv对图像的操作也有了基本的理解,其实剪辑也就是保存从你需要的某一帧图像开始到另一位置的帧(貌似不太通顺,不管了,理解就好),在程序中你可以把videoCapture()中改成需要导入的视频,下面我贴出代码讲解:
#!/usr/bin/python# -*- coding: utf-8 -*-import cv2import numpy as npimport time c=time.time() # 为保存视频做准备t=time.ctime(c)i=1videoname=str(t)+'.avi'fourcc = cv2.cv.CV_FOURCC('M', 'P', '4', '2')out=cv2.VideoWriter(videoname,fourcc,10,(640,480))cap=cv2.VideoCapture(1)cv2.namedWindow('test.avi',cv2.WINDOW_NORMAL)while(1): ret,frame=cap.read() #get frame cv2.imshow("test.avi",frame) if i==99: cv2.imwrite('xiaorun.jpg', frame) i=i+1 out.write(frame) if cv2.waitKey(1)&0xFF==ord('q')or ret==False: breakcap.release()cv2.destroyAllwindows()
在这里我剪辑的是99到299帧视频,大家可以按照自己的需求进行修改,为了方便和更加精确的剪辑,在这里我们可以利用putText函数对视频帧数进行显示一下,从而好确认自己需要的是哪一帧到哪一帧是自己所需。大家可以看一下效果图:
#!/usr/bin/python# -*- coding: utf-8 -*-import cv2import numpy as npimport time c=time.time() # 为保存视频做准备t=time.ctime(c)i=1videoname=str(t)+'.avi'fourcc = cv2.cv.CV_FOURCC('M', 'P', '4', '2')out=cv2.VideoWriter(videoname,fourcc,10,(640,480))cap=cv2.VideoCapture(1)#cv2.namedWindow('test.avi',cv2.WINDOW_NORMAL)while(1): ret,frame=cap.read() #get frame cv2.putText(frame,'##',(20,20),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) cv2.putText(frame,str(i),(80,20),cv2.FONT_HERSHEY_PLAIN,2.0,(255,255,255),2,1) cv2.imshow("test.avi",frame) # if i==99: # cv2.imwrite('xiaorun.jpg', frame) if i>99 and i<299: out.write(frame) i=i+1 if cv2.waitKey(1)&0xFF==ord('q')or ret==False: breakcap.release()cv2.destroyAllwindows()
最后分帧的操作就交给大家自己完成吧,就是将图片分成一张纸图片,只需要将上面代码修改一行即可完成。
- python实现拍照,录像,剪辑,分帧等操作
- Android 实现拍照、录像
- C#操作Aforge摄像头 实现拍照、录像功能
- Android 实现预览,录像,拍照
- android 实现录像时拍照
- Android - 实现拍照,录像功能
- 拍照 录像
- 拍照录像
- 使用UIImagePickerController实现 iOS录像拍照
- Android自定义照相机实现 拍照 录像
- Android 简单的实现拍照和录像
- 【腾讯TMQ】机器学习实现录像分帧速度测试
- Android开发-拍照录像-AndroidStudio(一)自己实现拍照
- android拍照并剪辑
- AForge.net 使用之录像拍照功能实现
- 利用AVFoundation实现Blink拍照和录像的功能
- 整合Camera和MediaRecorder实现拍照和录像
- Android 多媒体 通过MediaRecorder+SurfaceView实现拍照,录像
- Java初学者必知:Java语言的11大特点
- ios-知识点补充
- 基于Otsu的全局阈值处理的实现
- 浮动布局--如何解决父元素高度为0以及原理
- percona5.26基于gtid的主从复制配置
- python实现拍照,录像,剪辑,分帧等操作
- CentOS 7更换国内yum源
- 配置启动hadoop jobhistory
- Echarts图表之柱状图
- 通过spring手动获取bean报空指针问题
- 关于git的使用
- HTML样式
- 【Spring】DispatcherServlet源码分析
- 定时器