1. 图片的读取,保存与显示:
1)调用opencv
import numpy as np
import cv2
img_path = "D:/DL/AI-future/af2019-cv-training-20190312/00/00aed3c6b8f351e52ed5075603b56be1_c.jpg"
img = cv2.imread(img_path,0) #读入图像。第二个参数cv2.IMREAD_COLOR/cv2.IMREAD_GRAYSCALE
cv2.imshow("image",img) #显示图像。 注意:毫秒级的,如果没有下句则会闪退
cv2.waitKey(0) #0--无限期的等待键盘输入,按键之后才会运行下一句
cv2.destroyAllWindows() #删除任何我们建立的窗口。删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删 除的窗口名。
cv2.imwrite(img_path,img) #保存图像
例题:加载一个灰度图,显示图片,按下’s’键保存后退出,或者 按下 ESC 键退出不保存。
import numpy as np
import cv2
img = cv2.imread('messi5.jpg', 0)
cv2.imshow('image', img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save
cv2.imwrite('messigray.png', img)
cv2.destroyAllWindows()
2)使用 Matplotlib -----Matplotib 是 python 的一个绘图库
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg', 0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()
注意:彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotib 是 RGB 模式。所以彩色图像如果已经被 OpenCV 读取,那它将不会被 Matplotib 正确显示。
2. 视频的读取,显示和保存
为了获取视频,你应该创建一个 VideoCapture 对象。他的参数可以是 设备的索引号,或者是一个视频文件。
设备索引号就是在指定要使用的摄像头。 一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或 者其他的来选择别的摄像头。之后,你就可以一帧一帧的捕获视频了。但是最后别忘了停止捕获视频。
- 读取与显示
例题:
1)使用摄像头来捕获一段视频,并把它转换成灰度视频显示出来。
import numpy as np
import cv2
cap = cv2.VideoCapture(0) #创建一个 VideoCapture 对象
while(True):
ret, frame = cap.read() #一帧一帧读取图片
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release() # 释放捕获
cv2.destroyAllWindows()
2) 从文件中播放视频
只需要把设备索引号改成视频文件的名字。在 播放每一帧时,使用 cv2.waiKey() 设置适当的持续时间。如果设置的太低,视频就会播放的非常快,如果设置的太高就会播放的很慢,通常情况下 25 毫秒就可以了。
- 保存
对于图片来时很简单,只需要使用 cv2.imwrite()。
对于视频来说我们要创建一个 VideoWriter 的对象。我们应该确定一个输出文件的名字。接下来指定 FourCC 编码(见下面)。播放频率和帧的大小也都需要确定。最后一个是 isColor 标签。如果是 True,每一帧就是彩色图,否则就是灰度图。
FourCC 就是一个 4 字节码,用来确定视频的编码格式:
例题:从摄像头中捕获视频,沿水平方向旋转每一帧并保存它。
import numpy as np
import cv2
cap = cv2.VideoCapture(0) #创建一个 VideoCapture 对象
#定义编解码器并创建VideoWriter对象
fourcc = cv2.cv.FOURCC(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read() #一帧一帧读取图片。cap.read() 返回一个布尔值(ret=True/False)。如果帧读取的是正确的, 就是 True。
if ret== True:
frame = cv2.flip(frame,0) #1水平翻转,0水平翻转,-1水平竖直翻转
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()
所以,保存操作记得有三步:
1)定义编解码器并创建VideoWriter对象
fourcc = cv2.cv.FOURCC(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
2)操作后保存
out.write(frame) #保存
3)关闭
out.release()