Python+OpenCV+pyQt5录制双目摄像头视频的实例
- 更新时间:2022-09-07 08:49:46
- 编辑:黄弘量
参考资料
- 《OpenCV 4计算机视觉:Python语言实现(原书第3版)》配图源码 配套资源 / 266.5 MB / [加]约瑟夫·豪斯(Joseph Howse),[爱]乔·米尼奇诺(Joe Minichino) 推荐度:
- 《OpenCV 3计算机视觉:Python语言实现(原书第2版)》源代码 配套资源 / 29.19 MB / 乔·米尼奇诺 推荐度:
- OpenCV算法精解:基于Python与C++ PDF 电子书 / 84 MB / 张平 推荐度:
正文内容
起因
说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用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进行构造,这里因为是双目摄像头,我们构造的界面就是这样子的了:
其中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 OpenCV相关教程
-
详解Python下opencv图像的阈值处理
这篇文章主要介绍了Python下opencv图像阈值处理的使用笔记,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
发布时间:2020-02-28
-
python使用OpenCV实现人脸识别
这篇文章主要为大家详细介绍了python调用OpenCV实现人脸识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2020-02-22
-
python opencv对目录下图片进行去重的技巧
今天小编就为大家分享一篇使用python opencv对目录下图片进行去重的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2019-10-24
-
opencv对python3的支持
支持。opencv_python-3.1.0-cp34-cp34m-win_amd64.whl。这就是用于python3.1版本的opencv库。除此之外还有其他版本的就不一一举例了,请网上详查。
发布时间:2020-01-23
-
python opencv将特定颜色转换方法总结
在本篇文章里小编给大家整理了关于python opencv将特定颜色转换方法以及相关知识点内容,有兴趣的朋友们参考学习下。
发布时间:2019-06-24
-
python 利用opencv实现图像网络传输
给网友朋友们带来一篇关于python的教程,这篇文章主要介绍了python 如何利用opencv实现图像网络传输,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
发布时间:2022-06-26
-
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
给大家整理了关于Python的教程,这篇文章主要介绍了使用Python的OpenCV模块识别滑动验证码的缺口,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
发布时间:2022-06-18
-
详解python利用Opencv实现人脸识别功能
这篇文章主要为大家详细介绍了python利用Opencv实现人脸识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2020-02-21