参考自:《Python计算机视觉》第十章
########################################################
OpenCV提供了两个Python接口,旧的cv模块使用OpenCV内部的数据类型,并且从Numpy使用起来可能需要一些技巧;而新的cv模块使用Numpy数组,并且使用起来更加直观。
导入新的cv模块的方式:
import cv2
import cv2.cv
#########################################################
读 / 写 显示以及转换图像
help(cv2.imread)
#读取图像result.jpg(在当前目录)
img=cv2.imread("result.jpg")
type(img)
OpenCV的图像为Numpy中的多维数组对象
help(cv2.imwrite)
输入文件名和待保存对象即可,函数imwrite()会根据文件后缀自动转换图像
cv2.imwrite("result.jpg", img) #保存为jpg格式的文件
help(cv2.cvtColor)
在OpenCV中,图像不是按传统的RGB颜色通道,而是按BGR顺序(即RGB的倒序)存储的。读取图像时默认的是BGR
颜色空间的转换用函数cvtColor()实现,常用的转换代码为:
cv2.COLOR_BGR2GRAY #BGR图像转换为灰度图像
cv2.COLOR_BGR2RGB #BGR格式图像转换为RGB格式图像
cv2.COLOR_GRAY2BGR #灰度图像转换成BGR图像
上面每个转换代码中,转换后的图像颜色通道数与对应的转换代码相匹配,比如对于灰度图像只有一个通道,对于RGB和BGR图像则有三个图像
#读取图像
im=cv2.imread("result.jpg")
#创建灰度图像
gray=cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
help(cv2.imshow)
输入参数为窗口名和图像对象即可
help(cv2.waitKey)
参数可选,为空表示窗口一直停留,直到有按键按下;可以为数字,表示窗口停留的时间,以毫秒计
#读取图像
im=cv2.imread('result.jpg')
#显示图像
cv2.imshow('opencv', im)
cv2.waitKey()
#####################################################################
视频读入
单纯使用Python来处理视频有些困难,因为需要考虑速度 / 编解码器 / 摄像机 / 操作系统和文件格式。目前还没有针对Python的视频库,使用OpenCV的Python接口是唯一还不错的选择。
OpenCV能够很好的支持从摄像头读取视频
example:捕获视频帧并在OpenCv窗口中显示这些视频帧
import cv2
#设置视频捕获
cap=cv2.VideoCapture(0)
#循环
while True:
ret,im=cap.read()
#显示在窗口上
cv2.imshow('video test', im)
key=cv2.waitKey(10)
if key==27:
break
if key==ord('' ):
cv2.imwrite('vid_result.jpg', im)
1.捕获对象VideoCapture从摄像头或文件捕获视频。通过一个整数进行初始化,该整数为视频设备的id:如果仅有一个摄像头与计算机相连接,那么该摄像头的id为0;
2.read()方法解码并返回下一视频帧,第一个变量ret是一个判断视频帧是否成功读入的标志,第二个变量则是实际读入的图像数组;
2.函数waitKey()等待用户按键,如果按下的是Esc(ASCII码是27)键,则退出应用;如果按下的是空格键,就保存该视频帧
cap=cv2.VideoCapture(videoname)