初学opencv学习——图像的 IO操作
(1)读取视频
video
=cv2
.VideoCapture
("video.demo.mp4")
2)检查视频是否打开正确
# 检查是否打开正确
if video.isOpened():
# 我们都知道视频和游戏其实都是由图像组成的,通过访问图像的帧数连贯形成的,这里也是一样
# video.read() 一帧一帧地读取
# open 得到的是一个布尔值,就是 True 或者 False
# frame 得到当前这一帧的图像
open, frame = video.read()
else:
open = False
3)遍历每一帧图像
while open:
ret, frame = video.read()
# 如果读到的帧数不为空,那么就继续读取,如果为空,就退出
if frame is None:
break
if ret == True:
# 转换为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow("video",gray)
# 这里使用 waitKey 可以控制视频的播放速度,数值越小,播放速度越快
# 这里等于 27 也即是说按下 ESC 键即可退出该窗口
if cv2.waitKey(10) & 0xFF == 27:
break
video.release()
cv2.destroyAllWindows()
当然,上面的程序是将原视频设置为灰色的,想要显示的是原视频,只需要修改上述代码中的两个部分就行了
图像处理(Getting Started with Images)
学习使用cv2.imread(), cv2.imshow() , cv2.imwrite()这三个函数,以及Matplotlib库显示图像。
读取图像
cv2.imread(filename, flags=None)
import cv2
img = cv2.imread(r'/home/luke/图片/2018-08-09 11-58-52.jpg',cv2.IMREAD_COLOR)
# filename参数u用于定位图片,可以是当前路径或绝对路径,注意windows平台,字符串前加 r
# 第二项参数的默认值是:cv2.IMREAD_COLOR,读取色彩图像,还可以是
# cv2.IMREAD_GRAYSCALE : 读取灰度图像
# cv2.IMREAD_UNCHANGED : 读取图像包含 alpha channel
显示图像
cv2.imshow() 函数将图像显示到窗口,窗口大小自动适应图像大小。
cv2.imshow('image',img)
#参数1:窗口标题名称
#参数2:已读取的显示图像
cv2.waitKey(0)
# cv2.waitKey()函数等待任意按键,
# 参数是等待超时时间,时间单位为ms;参数为0时,等待直到任意键按下,
# 返回值是按下的键值
cv2.destroyAllWindows()
# 销毁所有打开的窗口
保存图像
img = cv2.imread('/home/luke/图片/2018-07-19 19-47-33屏幕截图.png',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
#k = cv2.waitKey(0) & 0xFF
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
cv2.imwrite('/home/luke/图片/test.png',img)
cv2.destroyAllWindows()
视频处理
主要学习函数:
读取摄像头播放视频
要播放摄像头视频,需要先捕捉摄像头视频流,创造一个VideoCapture对象。
cv2.VideoCapture()用于
import numpy as np
import cv2
cap = cv2.VideoCapture('video/demo.mp4')
while(cap.isOpened()):
ret,frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
# 这里使用 waitKey 可以控制视频的播放速度,数值越小,播放速度越快
break
cap.release()
cv2.destroyAllWindows()
创建VideoCapture对象,参数可以使video设备序号,从0开始,也可以是设备名称/dev/video0cap 对象代表的摄像头节点可能还未被初始化,直接读取可能会报错可以使用cap.isOpened()函数判断,返回值为True,表示已打开;否则用cap.open()函数打开。
cap.get(propId)函数可以获取视频相关参数
cap.set(propId, vaule),设置视频相关参数
out = cv2.VideoWriter('out.avi',fourcc,20.0,(640,480))
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('video/demo.mp4',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,0)
# write the flipped frame,垂直方向翻转
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()