OpenCV 单目摄像头(python版)

网友投稿 1162 2022-05-29

前言

本文主要介绍在OpenCV用使用单目摄像头,包括:打开单目摄像头、设置摄像头参数、拍照、录制视频。

环境:编程语言:Python3        主要依赖库:OpenCV3.x 或 OpenCV4.x

目录

1)打开摄像头

2)设置分辨率

3)细节提升

4)摄像头拍照

5)录制视频

单目摄像头

1)打开摄像头

OpenCV有VideoCapture()函数,能用来定义“摄像头”对象,0表示第一个摄像头(一般是电脑内置的摄像头);如果有两个摄像头,第二个摄像头则对应VideoCapture(1)。

在while循环中使用“摄像头对象”的read()函数一帧一帧地读取摄像头画面数据。

imshow函数是显示摄像头的某帧画面;cv2.waitKey(1)是等待1ms,如果期间检测到了键盘输入q,则退出while循环。

# -*- coding: utf-8 -*-

import cv2

cap = cv2.VideoCapture(0) # 0表示第一个摄像头

while(1):

# get a frame

ret, frame = cap.read()

# show a frame

cv2.imshow("capture", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。

2)设置分辨率

有时需要指定摄像头的分辨率,比如1920*1080;

cap.set(3,1920) 设置帧的宽度为1920。cap.set(4,1080) 设置帧的长度为1080。

# -*- coding: utf-8 -*-

import cv2

cap = cv2.VideoCapture(0)

#先设置分辨率,宽:1920 长:1080

cap.set(3,1920)

cap.set(4,1080)

while(1):

# get a frame

ret, frame = cap.read()

# show a frame

cv2.imshow("capture", frame)

OpenCV 单目摄像头(python版)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

拓展:当摄像流为 cap,设置参数是cap.set(参数编号,参数);获取参数值的函数是 cap.get(参数编号)。

3)细节提升

其实在ret, frame = cap.read() 代码,能通过ret 的值来判断是否成功读取到摄像头的画面数据,加一个判断逻辑更严谨一些;

成功读取摄像头数据时,ret 值返回True;获取失败时返回False。

# -*- coding: utf-8 -*-

import cv2

cap = cv2.VideoCapture(0)

#先设置分辨率,宽:1920 长:1080

cap.set(3,1920)

cap.set(4,1080)

while(1):

# get a frame

ret, frame = cap.read()

if ret:

# show a frame

cv2.imshow("capture", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

else:

print("图像数据获取失败!!")

break

cap.release()

cv2.destroyAllWindows()

4)摄像头拍照

拍照 = 保存图片,使用 cv2.imwrite 把当前摄像头的帧 数据写进去,保存为图片的形式;如果s键按下,则进行图片保存;

# -*- coding: utf-8 -*-

import cv2

cap = cv2.VideoCapture(0)

#先设置分辨率,宽:1920 长:1080

cap.set(3,1920)

cap.set(4,1080)

# 图像计数 从1开始

img_count = 1

while(1):

# get a frame

ret, frame = cap.read()

if ret:

# show a frame

cv2.imshow("capture", frame)

# 等待按键事件发生 等待1ms

key = cv2.waitKey(1)

if key == ord('q'):

# 如果按键为q 代表quit 退出程序

print("程序正常退出..")

break

elif key == ord('s'):

## 如果s键按下,则进行图片保存

# 写入图片 并命名图片为 图片序号.png

cv2.imwrite("{}.png".format(img_count), frame)

print("保存图片,名字为 {}.png".format(img_count))

# 图片编号计数自增1

img_count += 1

else:

print("图像数据获取失败!!")

break

cap.release()

cv2.destroyAllWindows()

5)录制视频

保存图片使用的是cv2.imwrite(),要保存视频,需要创建一个VideoWriter对象,需要传入四个参数。

输出的文件名,如’output.avi’

编码方式FourCC码

帧率FPS

要保存的分辨率大小

# -*- coding: utf-8 -*-

import cv2

cap = cv2.VideoCapture(0)

# 定义编码方式并创建VideoWriter对象

fourcc = cv2.VideoWriter_fourcc(*'MJPG')

outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480))

while(cap.isOpened()):

ret, frame = cap.read()

if ret:

outfile.write(frame) # 写入文件

cv2.imshow('frame', frame)

if cv2.waitKey(1) == ord('q'):

break

else:

break

使用cv2.VideoCapture()创建视频对象,然后在循环中一帧一阵显示图像。

参考:https://www.programcreek.com/python/example/85663/cv2.VideoCapture

https://appdividend.com/2020/06/26/python-cv2-videocapture-how-to-load-video-in-python/

OpenCV Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Flume 应用场景及架构原理
下一篇:手撕环形队列
相关文章