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 图片读取和视频读取的主要内容,如果未能解决你的问题,请参考以下文章