Opencv-python官方文档个人学习(一)

Opencv需求版本:Opencv>=3.4.4

1.从图片开始

学习如何读取、展示、保存图片

目标:

  1. 从文件中读取图像(cv.imread)
  2. 以Opencv窗口展示图像(cv.imshow)
  3. 将图片写入文件中(cv.imwrite)

源码

import cv2 as cv
import sys

#从文件中读取图片
img = cv.imread('blox.jpg')

if img is None:
    sys.exit('Could not read the image.')

#以Opencv窗口显示图片
cv.imshow('Display Window',img)

#等待按键信息传入变量k中
k = cv.waitKey(0)
if k == ord('s'):
    cv.imwrite('blox.png',img)

注:使用的图片路径在opencv/sources/samples/data文件夹下

解释

第一步,导入Opencv的python库和其他需要使用的库

import cv2 as cv
import sys

主要代码分析

cv.imread 第一个参数为图片的路径,第二个参数有三个可选项

  1. IMREAD_COLOR:以BGR通道,位深度为8的格式读取图片,默认选项。数字形式为 1
  2. IMREAD_UNCHANGED:按原样加载图片(包括存在的Alpha通道)。数字形式为 0
  3. IMREAD_GRAYSCALE:将图像加载为强度图像(理解为只加载几个通道图像的灰度值)。数字形式为 -1
img = cv.imread('blox.jpg')
#img = cv.imread('blox.jpg',IMREAD_COLOR) 默认为该参数 
#img = cv.imread('blox.jpg',IMREAD_UNCHANGED)
#img = cv.imread('blox.jpg',GRAYSCALE)

然后通过调用cv.imshow函数来显示图像,第一个参数是图像窗口的标题,第二个是将要显示的图像对象。

cv.imshow('Display Window',img)

最后,我们希望窗口一直显示到用户按下某个键为止,所以我们使用cv.waitKey函数,唯一的参数是等待用户输入的时间(按照毫秒计算)。零代表永远等待。该函数有返回值为用户按下的键。

k = cv.waitKey(0)
if k == ord('s'):
    cv.imwrite('blox.png',img)

如果返回的值为s,即用户按下s键,则调用cv.imwrite函数,将img图像保存到指定路径中,同时关闭图像窗口,程序结束运行。

如果返回值不为s,就会直接关闭图像窗口,程序结束运行。

2.从视频开始

学习展示视频、从相机中获取视频和保存视频

目标:

  1. 学习读取、展示、保存视频()
  2. 学习从相机中获取视频并展示它()

源码1 从摄像头中捕获视频

import numpy as np
import cv2 as cv
#此处0为参数代表摄像头设备编号
cap = cv.VideoCapture(0)
#判断摄像头是否打开
if not cap.isOpened():
    print('Cannot open camera')
    exit()

while True:
    # ret -> return value即返回值 代表着是否读取到了视频,frame为截取的视频的一帧图片
    ret,frame = cap.read()

    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    #将视频中每一帧图片转换为灰度图
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('frame',gray)
    #此处waitKey中的参数如果为0则会出现按下按键才会刷新下一帧的问题
    if cv.waitKey(1) == ord('q'):
        break

#释放摄像头捕获程序
cap.release()
cv.destroyAllWindows()

源码2 从文件中打开视频

import numpy as np
import cv2 as cv
cap = cv.VideoCapture('vtest.avi')

while cap.isOpened():
    ret,frame = cap.read()

    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)

    cv.imshow('frame',gray)
    if cv.waitKey(1) == ord('q'):
        break
cap.release()
cv.destroyAllWindows()

源码3 保存视频

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)

#定义VideoWriter参数中的FourCC,即指定视频编码器的4字节代码
fourcc = cv.VideoWriter_fourcc(*'XVID')
#四个参数分别为保存的路径文件、指定视频编码、帧率、视频长宽
out = cv.VideoWriter('output.avi',fourcc,20.0,(640,480))

if not cap.isOpened():
    cap.open()

while cap.isOpened():
    ret,frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    #进行帧翻转
    frame = cv.flip(frame,0)
    #将视频帧写入视频
    out.write(frame)

    cv.imshow('frame',frame)
    if cv.waitKey(1) == ord('q'):
        break
cap.release()
out.release()
cv.destroyAllWindows()

相关函数解释

cv.VideoCapture():作用为获取指定文件/编号摄像头中的视频流。参数为视频路径/摄像头编号

cap.IsOpened():判断摄像头是否初始化捕捉或者视频流是否能打开,使用该函数进行判断,打开返回True,反之则返回False

cap.open()::对未打开的摄像头进行打开操作。若cap中包含了视频流,则会报错

有时摄像头可能未初始化捕捉,所以需要使用cap.IsOpened()判断一下,如果确实未打开,则可以使用cap.open()打开

cv.VideoWriter():定义一个对象来保存视频,参数有5个,分别为输出文件名FourCC视频编码FPS(每秒帧率)帧大小(视频长宽)isCOLOR(True为彩色帧、False为灰度帧),之后就循环用write方法将帧写入该对象。即完成了保存视频操作

fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

out.write(frame)

cap.get(propId):访问视频中的属性,可选参数0-18,代表视频的各个属性。

函数 cap.get(propId) 可以用来获得视频的一些参数信息。这里 
propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性: 
• CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.   

0-视频文件的当前位置(毫秒)
• CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next. 

1-下一步要解码/捕获的帧的基于0的索引
• CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file: 0 - start of the film, 1 - end of the film. 

2-视频文件的相对位置:0-胶片开始,1-胶片结束
• CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream. 

3-视频流中帧的宽度
• CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream. 

(4-视频流中帧的高度

• CV_CAP_PROP_FPS Frame rate. 

5-帧率

• CV_CAP_PROP_FOURCC 4-character code of codec. 

6-编解码器的4字符代码

• CV_CAP_PROP_FRAME_COUNT Number of frames in the video file. 

7-视频文件中的帧数。

• CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() . 

8-返回mat对象的格式

• CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode. 

9-后端特定值,指示当前捕获模式

• CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras). 

10-图像的亮度--仅适用于相机

• CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras). 

11-对比度--仅用于相机

• CV_CAP_PROP_SATURATION Saturation of the image (only for cameras). 

12-饱和度--仅用于相机

• CV_CAP_PROP_HUE Hue of the image (only for cameras). 

13-色调--仅用于相机

• CV_CAP_PROP_GAIN Gain of the image (only for cameras). 

14-增益--仅用于相机

• CV_CAP_PROP_EXPOSURE Exposure (only for cameras). 

15-曝光--仅用于相机

• CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.

16-布尔标志,指示是否应将图像转换为RGB。) 

• CV_CAP_PROP_WHITE_BALANCE Currently unsupported 

17-当前不受支持

• CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently) 

18-立体摄像机的校正标志(注:目前仅受DC1394 v 2.x后端支持)

对应的,使用 cap.set(propId,value) 来修改视频属性,value 就是你想要设置成的新值。

转自opencv教程propid属性 - StarZhai - 博客园 (cnblogs.com),感谢作者。

cap.set(propId,value):对视频的某个属性进行修改赋值操作。

总结

本篇文章展示了如何使用Opencv进行基本的图像读取、展示、保存以及视频的捕获、展示和保存操作。

注:该文章为一篇学习笔记,可能有什么遗漏或者错误的地方,希望大家帮忙指正,感谢。

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值