初学opencv学习——图像的 IO操作

初学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()

视频处理

主要学习函数:

  • cv2.VideoCapture(),
  • cv2.VideoWriter()

读取摄像头播放视频

要播放摄像头视频,需要先捕捉摄像头视频流,创造一个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),设置视频相关参数

播放视频文件

保存视频文件

VideoWriter()是用来保存视频的函数,其作用是将录制的视频保存成 filename

fourcc = cv2.VideoWriter_fourcc(*'XVID')

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()

你可能感兴趣的