opencv--python(一)图像和视频处理之读取,显示和保存

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

猜你喜欢

转载自blog.csdn.net/qq_42219077/article/details/89091476