python opencv入门(读 / 写 显示以及转换图像 和 视频读入)

参考自:《Python计算机视觉》第十章


########################################################


OpenCV提供了两个Python接口,旧的cv模块使用OpenCV内部的数据类型,并且从Numpy使用起来可能需要一些技巧;而新的cv模块使用Numpy数组,并且使用起来更加直观。

导入新的cv模块的方式:

import cv2

导入旧的cv模块的方式:

import cv2.cv

以下函数均来自cv2模块


#########################################################


读 / 写 显示以及转换图像


help(cv2.imread)

python opencv入门(读 / 写 显示以及转换图像 和 视频读入)_第1张图片


#读取图像result.jpg(在当前目录)
img=cv2.imread("result.jpg")

返回的img是一个Numpy的数组对象

type(img)  


OpenCV的图像为Numpy中的多维数组对象


help(cv2.imwrite)
python opencv入门(读 / 写 显示以及转换图像 和 视频读入)_第2张图片

输入文件名和待保存对象即可,函数imwrite()会根据文件后缀自动转换图像

cv2.imwrite("result.jpg", img) #保存为jpg格式的文件


help(cv2.cvtColor)

python opencv入门(读 / 写 显示以及转换图像 和 视频读入)_第3张图片

在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)
python opencv入门(读 / 写 显示以及转换图像 和 视频读入)_第4张图片

输入参数为窗口名和图像对象即可


help(cv2.waitKey)

python opencv入门(读 / 写 显示以及转换图像 和 视频读入)_第5张图片

参数可选,为空表示窗口一直停留,直到有按键按下;可以为数字,表示窗口停留的时间,以毫秒计


#读取图像
im=cv2.imread('result.jpg')
#显示图像
cv2.imshow('opencv', im)
cv2.waitKey()

python opencv入门(读 / 写 显示以及转换图像 和 视频读入)_第6张图片



#####################################################################


视频读入


单纯使用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)

如果输入的是视频名,则调用该视频流


你可能感兴趣的:(python)