OpenCV中的图像处理 —— 图像阈值+图像平滑+形态转换(opencv进行图像处理)
1207
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)
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小时内删除侵权内容。