OpenCV延时相机
这次用的是电脑的摄像头。暑假夏令营的时候买了两个摄像头来参加面试,现在被我闲置了。摄像头也能拍照啊,于是乎我就用摄像头来做延时相机了。这次想法比较简单,但也是遇到了很多的问题,特别是GUI方面。值得注意的是,这次程序我用来很多类与对象的东西,这个东西太难了,一直以来我都是能不能就不用,但这次是硬着头皮上了!
学习OpenCV
param | define | |
---|---|---|
cv2.VideoCapture.get(0) | 视频文件的当前位置(播放)以毫秒为单位 | CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds or video capture timestamp. |
cv2.VideoCapture.get(1) | 基于以0开始的被捕获或解码的帧索引 | CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next. |
cv2.VideoCapture.get(2) | 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。 | CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film. |
cv2.VideoCapture.get(3) | 在视频流的帧的宽度 | CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream. |
cv2.VideoCapture.get(4) | 在视频流的帧的高度 | CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream. |
cv2.VideoCapture.get(5) | 帧速率 | CV_CAP_PROP_FPS Frame rate. |
cv2.VideoCapture.get(6) | 编解码的4字-字符代码 | CV_CAP_PROP_FOURCC 4-character code of codec. |
cv2.VideoCapture.get(7) | 视频文件中的帧数 | CV_CAP_PROP_FRAME_COUNT Number of frames in the video file. |
cv2.VideoCapture.get(8) | 返回对象的格式 | CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() . |
cv2.VideoCapture.get(9) | 返回后端特定的值,该值指示当前捕获模式 | CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode. |
cv2.VideoCapture.get(10) | 图像的亮度(仅适用于照相机) | CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras). |
cv2.VideoCapture.get(11) | 图像的对比度(仅适用于照相机) | CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras). |
cv2.VideoCapture.get(12) | 图像的饱和度(仅适用于照相机) | CV_CAP_PROP_SATURATION Saturation of the image (only for cameras). |
cv2.VideoCapture.get(13) | 色调图像(仅适用于照相机) | CV_CAP_PROP_HUE Hue of the image (only for cameras). |
cv2.VideoCapture.get(14) | 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升) | CV_CAP_PROP_GAIN Gain of the image (only for cameras). |
cv2.VideoCapture.get(15) | 曝光(仅适用于照相机) | CV_CAP_PROP_EXPOSURE Exposure (only for cameras). |
cv2.VideoCapture.get(16) | 指示是否应将图像转换为RGB布尔标志 | CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB. |
cv2.VideoCapture.get(17) | × 暂时不支持 | CV_CAP_PROP_WHITE_BALANCE Currently not supported |
cv2.VideoCapture.get(18) | 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能) | CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently) |
Note: 如果查询的视频属性是VideoCapture类不支持的,将会返回0
1 |
|
v1.0
实现功能:调用相机捕获一帧照片,并用当前时间进行文件命名保存。
要点
cv2.VideoCapture().set(propId, value)的使用
retval = cv2.imwrite(filename, img [, paras])
filename:要保存的文件的路径和名称,包括文件扩展名
img:要保存的 OpenCV 图像,nparray 多维数组
paras:不同编码格式的参数,可选项
cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。ret, frame = cap.read()
- ret 为True 或者False,代表有没有读取到图片
- frame表示截取到一帧的图片
main.p
1 |
|
v1.1
新功能:以日期为分类,建立文件夹
main.py
1 |
|
makeDir.py
1 |
|
v1.2
- 修改了程序运行逻辑,使用函数的方式,对摄像头进行调用和释放,保证摄像头只在工作是时候处于激活状态.睡眠状态时,摄像头是关闭状态.
main.py
1 |
|
makeDir.py
1 |
|
v2.0 - 程序运行有问题
- 加入了GUI(图形用户接口),但是这个UI做的其实是有问题的,不能实时显示控制台信息!可能需要更改文本框的属性
main.py
1 |
|
GUI.py
1 |
|
makeDir.py
1 |
|
v2.1 - GUI还没改完
Hello World · PyQt5 中文教程 (gitbooks.io)
pyqt5实现—GUI界面实时显示控制台输出_跌跌撞撞进大坑的博客-CSDN博客_pyqt5 textbrowser实时输出
【Qt】控制台信息输出到GUI中(在TensorFlow、PySide6环境下,将训练信息实时输出在文本框中)_KyrieLiu52的博客-CSDN博客_qt输出文本框
v3.0
- 无GUI
- 实现了分别调用两个摄像头的功能
- 出现了长时间运行内存会爆掉的问题!
v3.1
- 定时重启,解决长时间运行,内存爆掉的问题(但为什么会出现爆内存的问题没解决)
1 |
|
v4.0
把程序进行了重写,改写了程序运行逻辑,尽可能减少一次循环占用的内存资源
比较复杂的功能都封装成了函数
使用百度PaddlePaddle深度学习框架,调用一个现成的深度学习的模型实现了抠图功能
main.py
1 |
|
- makeDir.py
1 |
|
- camInit.py
1 |
|
- takePic.py
1 |
|
- handleFigure.py
1 |
|
- findCamID.py
1 |
|
参考资料
OpenCV VideoCapture.get()参数详解 - 简书 (jianshu.com)
【OpenCV + Python】ret, frame = cap.read()返回值含义&视频读取_胖子工作室的博客-CSDN博客_cap.read
说明 · OpenCV-Python初学自码 · 看云 (kancloud.cn)
OpenCV的VideoCapture类的get、set参数列表_EmbedDebugger的博客-CSDN博客_videocapture参数
【OpenCV 例程300篇】02. 图像的保存(cv2.imwrite)_YouCans的博客-CSDN博客_cv2.imwrite
python获取所有可用摄像头(id + 名称)可用于opencv_babybin的博客-CSDN博客_python 获取摄像头列表