opencv 图片读取和视频读取

Posted angle6-liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv 图片读取和视频读取相关的知识,希望对你有一定的参考价值。

一 图片读取

1代码

import cv2 as cv
#读取图片
src=cv.imread(./yiner.jpg)
#cv.WINDOW_AUTOSIZE 表示自动窗口
cv.namedWindow(赵丽颖,cv.WINDOW_AUTOSIZE)
#图片显示窗口
cv.imshow(赵丽颖,src)
#参数0表示一直显示,直到键盘按下一个数字键就消失
cv.waitKey(0)
#删除所有的图片窗口
cv.destroyAllWindows()

 

2 图片读取函数解说

  •  imread( filename,int flags);  读取图片
flags:0和2表示灰色

     其他值表示彩色

 

  • cv.NamedWindow( name, int flags ); 创建windows窗口
参数1:窗口名字

参数2:窗口的显示方式

   可选类型有:
        为0或cv.WINDOW_NORMAL:可以改变窗口大小
        不写或cv.WINDOW_AUTOSIZE : 则不可改变大小,显示原图片大小

 

  •  imshow(winname, InputArray mat)  显示图片窗口
参数1:图片窗口名字
参数2:需要显示图片(numpy数组)

 

  • waitKey(K) 窗口显示时间,单位:毫秒  
k=0 : 无限期的等待键盘输入。

 

  • cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用 cv2.destroyWindow(),在括号内输入你想删除的窗口名

 

  • cv2.imwrite(filenameInputArray mat)   保存图片
参数1:图片保存的路径
参数2:表示图片的数组(src).

 

3 图片属性

import cv2 as cv
import numpy as np

#输出图片的属性
def get_image_info(image):
    print(type(image)) #显示图片数据类型为numpy类型

    # 图像矩阵的shape属性表示图像的大小,shape会返回tuple元组,
    # 第一个元素表示矩阵行数,第二个元组表示矩阵列数,第三个元素是3,
    # 表示像素值由光的三原色组成
    print(image.shape)
    print(image.size)#图像大小
    print(image.dtype)
    pixel_data=np.array(image)
    print(pixel_data)#图片矩阵

src=cv.imread(./yiner.jpg)
cv.namedWindow(颖儿,cv.WINDOW_AUTOSIZE)
cv.imshow(赵丽颖,src)
get_image_info(src)
cv.imwrite(yiner2.jpg,src) #图片另存为
cv.waitKey(0)
cv.destroyAllWindows()

 

技术图片

 

 二 视频读取

1 代码

# -*- coding=GBK -*-
import cv2 as cv

# 打开摄像头获取图片
def video_demo():
    # 打开摄像头,0代表的是设备id,如果有多个摄像头,可以设置其他数值
    capture = cv.VideoCapture(0)  
    while True:
        # 读取摄像头,它能返回两个参数,第一个参数是bool型的ret,其值为True或False,代表有没有读到图片;第二个参数是frame,是当前截取一帧的图片
        ret, frame = capture.read()
        # 翻转 0:上下颠倒 大于0水平颠倒   小于180旋转
        frame = cv.flip(frame, 1)  
        cv.imshow("video", frame)
        # 键盘输入q退出窗口,不按q点击关闭会一直关不掉 也可以设置成其他键。
        if cv.waitKey(10) & 0xFF == ord(q): 
            break


video_demo()
cv.destroyAllWindows()

 

 

2 参数解释

  • capture=VideoCapture(0) : 开启视频
0 表示打开本地摄像头,也可以设置其他数值
也可以是视频文件地址,调用视频文件,如果要播放要设置帧的循环
返回值:获取视频句柄

 

  • ret, frame = capture.read() 读取视频
返回值两个
返回值1:bool值,表示是否读取到视频;
返回值2:frame,是当前截取的一帧图片

 

  • frame = cv.flip(frame, 1) 视频图片的反转变换
参数2:
     0:上下颠倒 

     大于0:水平颠倒   

     小于0:180旋转

 

3 视频保存

  我们要创建一个 VideoWriter 的对象。我们应该确定一个输出文件的名字。接下来指定 FourCC 编码(下面会介绍)。播放频率和帧的大小也都需要确定。最后一个是 isColor 标签。如果是 True,每一帧就是彩色图,否则就是灰度图。

  FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表可以从fourcc.org查到。这是平台依赖的。下面这些编码器对我来说是有用个。
  • In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 givesvery small size video)
  • In Windows: DIVX (More to be tested and added)
  • In OSX : (I don’t have access to OSX. Can some one fill this?) 

FourCC 码以下面的格式传给程序,以 MJPG 为例:

cv2.cv.FOURCC(‘M‘,‘J‘,‘P‘,‘G‘) 或者 cv2.cv.FOURCC(*‘MJPG‘)。

# 视频保存
import cv2
#启动摄像头
cap = cv2.VideoCapture(0)

# 定义编解码器并创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*‘XVID‘)
out = cv2.VideoWriter(‘output.avi‘,fourcc, 20.0, (640,480))

while(cap.isOpened()):#摄像头是否开启
    ret, frame = cap.read() #读取视频
    frame = cv2.flip(frame, 0) #翻转视频
    if ret==True: #如果接受到视频信息
        frame = cv2.flip(frame,0)

        # 视频写入
        out.write(frame)

        cv2.imshow(frame,frame)
        if cv2.waitKey(1) & 0xFF == ord(q): #输入q退出
            break
    else:
        break

# 视频写完后就释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

 

 

 

 

 

 

 

以上是关于opencv 图片读取和视频读取的主要内容,如果未能解决你的问题,请参考以下文章

关于opencv读取图片、视频总是窗口一闪不出图、视频的问题

OpenCV视频读取播放,视频转换为图片

设置窗口可调整大小Python_OpenCV读取视频和图片

在opencv下读取视频保存为图片

opencv3读取视频并保存为图片

opencv读取ENVI标准格式