Python+OpenCV+pyQt5录制双目摄像头视频的实例


Posted in Python onJune 28, 2019

起因

说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写一个。要是OpenCV+python。貌似很简单就能OK的事情,但是,我们的项目不是一般要展示给老师看嘛。谁愿意看一个没有界面的录制过程是吧~,最后会附上源代码~

依赖的包

在这里,我直接把import的包写出来了各位可以进行对号入座,然后就能知道需要安装哪个包啦!

import cv2
import numpy as np
from PyQt5.QtWidgets import (QMainWindow, QApplication, QFileDialog)
import threading
import threadpool 
from CvPyGui import ImageCvQtContainer
from CvPyGui.ui import gui

界面设计

pyqt的界面可以用designer进行构造,这里因为是双目摄像头,我们构造的界面就是这样子的了:

Python+OpenCV+pyQt5录制双目摄像头视频的实例

其中TextLabel就是用来进行显示图像的,这里更新图像的代码如下:

class Image(QWidget):
 """Common base for the images"""

 def __init__(self, name, label):
 super().__init__()

 # Label (frame) where the original image will be located, with scaling
 self.frame_lbl = label

 def updateImage(self, opencv_rgb_image):

 self.cv_img_rgb = opencv_rgb_image

 height, width, channel = self.cv_img_rgb.shape
 bytesPerLine = 3 * width
 self.q_image = QImage(self.cv_img_rgb.data, width,
  height, bytesPerLine, QImage.Format_RGB888)

 self.frame_lbl.setPixmap(QPixmap.fromImage(self.q_image))

 def saveImage(self):
 # Function for saving the processed image

 filter = "Images (*.png *.jpg)"

 image_path, _ = QFileDialog.getSaveFileName(self, filter=filter)

 cv_img_bgr = cv2.cvtColor(
 self.cv_img_rgb, cv2.COLOR_RGB2BGR)
 cv2.imwrite(image_path, cv_img_bgr)

我们也知道,视频是一帧一帧的进行播放的。所以,我们在播放的时候实际上就是在更新每一帧的画面了。

OpenCV的视频获取

使用OpenCV获取视频很简单

cap = cv2.VideoCapture(int(text))
 cap.set(6 ,cv2.VideoWriter_fourcc('M', 'J', 'P', 'G') );
 cap.set(3,w);
 cap.set(4,h);
 global update1
 update1 = 1
 global shotmark1
 ret, frame = cap.read()

这样就能够获取到一帧图像了,其中cap.set()函数用来设置相机的参数,本来应该有宏定义的,但是在python里面老是报错,直接用数字替代了,其中3就是获取视频的宽度像素,4是高度,这个要和摄像头手册上的参数一致。一般的Webcam有两种图像获取格式:一种是YUV2格式这种事10bit回传的数据,理论上质量更好,但是有个很大的问题是分辨率高的时候,帧率就会变得十分低。另一种格式是MJPEG格式,这个是使用了压缩技术得到的视频流。通过这个格式,手册上说在1920x1080分辨率下都能获得30fps的表现,而YUV2只有5fps(后来发现,这个就是坑爹的,信了就怪了)。cap.set(6 ,cv2.VideoWriter_fourcc(‘M', ‘J', ‘P', ‘G') );这个参数就是使用MJPEG格式来读取摄像头的数据。

多线程

刚才我们呢也提到了,cap.read()这个函数是获取到了一帧图像,但是呢。我们要的是动画啊,要是写个循环的话,又会吧进程卡死在循环中,照成假死的状态,所以对于图像的绘制,一定要使用多线程技术。在这里我不仅要吐槽一下了。学了好多年计算机,讲了很多串行算法和编程,一讲到多线程,无非就是打印个Hello World!,根本就没有什么实践,理论倒是学了很多,感觉用的时候头真的好大!

其实这里的多线程也没有什么是吧,就是起调一下。但是要注意的是要控制线程的退出,在python这个我引入的多线程包里面,贼坑的是没有外界控制线程退出的办法!所以,我设置了一个全局变量,使用判断全局变量的值来判断是否让子线程继续下去。

结尾

实际上,还有分辨率/帧率设置功能呢,只不过懒得写了!!!3

GitHub:https://github.com/anonymouslycn/bjtu_BinocularCameraRecord

路过的还新希望你能够高抬贵手给个Star吖~~ 笔芯~~

以上这篇Python+OpenCV+pyQt5录制双目摄像头视频的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
学习python 之编写简单乘法运算题
Feb 27 Python
浅谈Python中函数的参数传递
Jun 21 Python
简单谈谈python的反射机制
Jun 28 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
Jun 11 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
Python魔法方法功能与用法简介
Apr 04 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
Pyqt QImage 与 np array 转换方法
Jun 27 #Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 #Python
对python中GUI,Label和Button的实例详解
Jun 27 #Python
python 整数越界问题详解
Jun 27 #Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 #Python
python 反编译exe文件为py文件的实例代码
Jun 27 #Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 #Python
You might like
php分页函数
2006/07/08 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
php中使用GD库做验证码
2016/03/31 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
js函数调用的方式
2014/05/06 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
vue2.0模拟锚点的实例
2018/03/14 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
用python读写excel的方法
2014/11/18 Python
Python中的字符串替换操作示例
2016/06/27 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
python实现excel读写数据
2021/03/02 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
2018/10/15 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
节水口号标语
2014/06/19 职场文书
邀请书格式范文
2015/02/02 职场文书
一个都不能少观后感
2015/06/04 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
灵能百分百第三季什么时候来?
2022/03/15 日漫