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中operator模块的操作符使用示例总结
Jun 28 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
python非递归全排列实现方法
Apr 10 Python
celery4+django2定时任务的实现代码
Dec 23 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
python lxml中etree的简单应用
May 10 Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 Python
Python二元赋值实用技巧解析
Oct 25 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
python飞机大战游戏实例讲解
Dec 04 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 24 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
python如何生成网页验证码
2018/07/28 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
2014全国两会心得体会
2014/03/17 职场文书
食品安全承诺书范文
2014/08/29 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
招商银行工作证明
2015/06/17 职场文书
学校教代会开幕词
2016/03/04 职场文书