0810opencv之图片与视频问题
实例代码:
一、图像的读入
# 图片读入 显示 保存 以及通过matplotlib 显示
def showimg():
# 第二个参数可以为 cv2.IMREAD_COLOR 彩色 cv2.IMREAD_GRAYSCALE 灰度模式
# cv2.IMREAD_UNCHANGED 读入衣服图像,并且包括图像的alpha通道
img = cv2.imread('D:\sublime\code\cvcode\photo\confu2.jpg',0) # 读入灰度图像
# 第二个参数默认值为cv2.WINDOW_AUTOSIZE
cv2.namedWindow('littlejun',cv2.WINDOW_NORMAL) # 新开一个窗口
cv2.imshow('littlejun',img)
#matplotlib 显示图片
plt.imshow(img,cmap='gray',interpolation = 'bicubic')
# plt.xticks([]),plt.yticks([]) #去除坐标
plt.axis('off') # 同上
plt.show()
k = cv2.waitKey(0)
if(k&0xff == 27):
cv2.destroyAllWindows()
elif(k&0xff == ord('s')):
cv2.imwrite('D:\sublime\code\cvcode\photo\saveconfu.jpg',img)
cv2.destroyAllWindows()
cv2. imread(imgpath,way)
# 第一个参数为图片路径
# 第二个为图片的读入方式有以下几种:
cv2.IMREAD_COLOR 彩色的 (默认参数)
cv2.IMREAD_GRAYSCALE 灰度模式 (一般用可用0代替)
cv2.IMREAD_UNCHANGED 读入图像,包括图像的alpah通道
二、图片的输出
cv2.imshow(windowname,img)
第一个参数为窗口名称,第二个为图片名称
一般推荐先创建一个窗口
用 cv2.namedWindow(name,p2)
P2 一般有:cv2.WINDOW_AUTOSIZE cv2.WINDOW_NORMAL(可以调窗口大小)
三、利用matplotlib 显示图片
它显示图片是RGB格式的,所以如果想输出彩色的,先转换。
From matplotlib import as plt
plt.imshow(img,cmp,interpolation= ‘bicubic’) #先加载图片
去除坐标刻度
plt.xticks([]),plt.yticks([]) 或者用plt.axis(‘off’)
最后要用plt.show() 才会在窗口显示
至于cv2.waitKey(num) 的作用
它是一个键盘绑定函数就是等待键盘的输入,num 如果是大于0的数,那么就在num ms内,按下一个键,那么就返回该键的ascaii码值,否则返回-10,如果num设定为0 ,那么就会无期限地等待键盘输入。它的另一个作用就是用来检查某个键是否已经被按下。
比如 cv2.waitKey(0)&0xff == ord(‘q’) 这个就是判断是否键入q的
四、 图片保存
cv2.imwrite(path,img)
参数1 就是保存路径,参数二就是图片
五、销毁窗口
cv2.destroyAllWindows() #销毁所有的窗口
cv2.destroyWindow(winname) # 销毁特定窗口
视频的采集与播放
实例代码:
# 视频采集和保存 ,读取文件视频
def video():
cv2.namedWindow('littlejun',cv2.WINDOW_NORMAL)
cap = cv2.VideoCapture(0) # 创建摄像头对象
# ret = cap.set(3,1000)
# ret = cap.set(4,800) # 设置高宽 为什么改变不了
# 确定视频编码格式
fourcc = cv2.VideoWriter_fourcc(*'XVID')
video = cv2.VideoWriter('D:\sublime\code\cvcode\photo\ newvideo.avi',fourcc,20.0,(640,400))
while(cap.isOpened()):
ret,frame = cap.read()
cv2.imshow('littlejun',frame)
if(ret):
video.write(frame)
if(cv2.waitKey(1)&0xff == ord('q')):
break
width,height,frequency = cap.get(3),cap.get(4),cap.get(5) # 3 宽 4 高 5 帧频
# print(width,height,frequency)
cap.release()
video.release()
cv2.destroyAllWindows()
# 从文件中播放视频
cap = cv2.VideoCapture('D:\sublime\code\cvcode\photo\encourage.MP4') # 读文件就是直接用文件路径初始话就好
cv2.namedWindow('littlejun')
while(cap.isOpened()):
ret,frame = cap.read()
cv2.imshow('littlejun',frame)
if(cv2.waitKey(25)&0xff == ord('q')): # 用waitKey() 来控制视频播放的帧频 一般25就比较好了
break
cap.release()
cv2.destroyWindow('littlejun')
一、视频的捕获和播放
1、 首先要创建一个VideoCapture 对象,一切视频采集或者播放由它来实现
Cap = cv2.VideoCapture(0) 参数2为设备索引好,一般笔记本有内置摄像头,所以0 就是本机的,当然可以用1 等选择别的设备。
2、 通过cv2.isOpened() 来检查摄像头是否初始化成功
视频其实也是图片播放的效果,所以我们获取到的是一张张的图片ret,frame = cap.read()
参数1为是帧返回是否正确,也可以用来判断视频文件是否已经到了结尾了。参2 是返回的图片
然后通过imshow(winname , frame) 就可一实时看到摄像头拍到的东西了
关于cap 有很多信息,比如帧的宽和高等
Cap.get(num) num for 0 to 18
其中3 是宽, 4 是高 其他就不说了
同样可以通过 cap.set(id, value) 来设置对应的值
视频的播放,只需要把VideoCapture(path) 把参数改为视频路径就好
同时通过waitKey(25) 来控制视频的播放速度,一般25比较好。
二、 视频的保存
这个就麻烦了一点,需要先确定编码格式
fourcc = cv2.VideoWriter_fourcc(*’XVID’)
创建视频写对象
video = cv2.VideoWriter(‘name.avi’,fourcc,20.0,(width,height))
参3是帧频,参数是帧的宽和高
写帧
video.write(frame)
三、 释放视频捕获对象和写对象
cap.release()
video.release()