用python语言实现一个函数_python使用opencv3 01 入门函数基础(根据《opencv3 计算机视觉 python语言实现》总结)...

先解决一个问题,为什么opencv3在python中的导入方式是import cv2?

简单的解释一下,就是这里的数字‘2’并不代表版本号,而是代表一些别的东西。想要知道opencv的版本就输入指令 print(cv2.__verson__)

顺便提示一下,opencv是以numpy模块为基础,来处理数据。

首先介绍一下处理图片的基本知识

矩阵array[[[1,0,0],

[0,0,0],

[0,0,0]],

[[2,0,0],

[0,0,0],

[0,0,0]],

[[3,0,0],

[0,0,0],

[0,0,0]]

]

此矩阵为一个三维数组,可以表示一个BGR三通道形式表示的9个像素点的图片,每个像素点一般用三个8位(二进制)的数字来表示,所以每个像素的范围是0-255的三个数字组成的。

比如图片的左上角第一个像素点的蓝色B=1(array[0,0,0]),绿色G=2(array[1,0,0]),红色R=3(array[2,0,0])。

其他的色彩表示方法和BGR的形式差不多,只是取值范围或是通道数不同而已。(提示:在学习opencv时三色表示的顺序都是BGR,而不是一般人认为的RGB,具体我也不知道为什么)

然后列出一些基本的重点函数(只介绍一些常用的参数和常用的方法,具体可以自己查资料)

1.读取和保存图片的两个函数

cv2.imread(参数1,参数2)此处的参数1为字符串,内容为想要读取的图像的文件路径。参数2为数字,不同的数字可以控制函数返回不同形式的数字矩阵。

函数的作用:读取一个图像文件,默认返回三通道的BGR的数字矩阵。可控制参数2改变返回形式。

cv2.imwrite(参数1,参数2)此处的参数1为字符串,表示想要保存的路径和文件名。参数2为某数字矩阵。

函数的作用:将一个数字矩阵转化成图片并按指定路径保存。

2.处理视频帧的一些函数(读取帧的操作往往伴随循环)

cv2.VideoCapture(参数1)此处的参数1为信号源

函数的作用:使某一视频文件或是摄像头作为帧的输入源。返回该输入源。

下面假设使用x来接收信号源,即以执行x = cv2.VideoCapture(参数1)为前提

x.read()

函数的作用:读取一帧的数据返回值有两个,依次是布尔值(判断成功与否),帧的内容。(再次调用则获取下一帧)。

x.get(参数1)此处的参数1为cv2的内置参数

函数的作用:这里介绍三个,当参数为cv2.CAP_PROP_FPS时,返回获取到的文件帧率。

当参数为cv2.CAP_PROP_WIDTH时,返回获取到的文件画面的宽。

当参数为cv2.CAP_PROP_HEIGHT时,返回获取到的文件画面的高。

cv2.VideoWrite(参数1,参数2,参数3,参数4)此处的参数1为字符串,表示保存路径及名称,参数2为cv2的内置参数编码器的不同模式,参数3为数字,表示帧率,参数4为数字,表示大小(宽高)

函数的作用:以参数1234确定的标准,返回一个即将保存的视频对象。

下面假设使用y来表示即将保存的视频对象,即以执行y = cv2.VideoWrite(参数1,参数2,参数3,参数4)为前提

y.write(参数1)此处的参数1为帧流即数字矩阵

函数的作用:将此帧写入视频对象。

y.release()

函数作用:释放摄像头。

3.管理窗口的一些函数

cv2.namedWindow(参数1)此处的参数1为字符串,表示窗口名

函数的作用:创建一个名为参数1的窗口。

cv2.imshow(参数1,参数2)此处的参数1为字符串,表示窗口名,参数2为要显示的内容(可以是图片也可以是视频或是摄像头等信号源)

函数的作用:将参数2的内容显示在名为参数1的窗口上(显示一下会立即消失,必须搭配waitkey()使用)。

cv2.destoryWindow(参数1)此处的参数1为字符串,表示要销毁的窗口名

函数的作用:将名为参数1的窗口销毁。

cv2.waitKey(参数1)此处的参数1为数字,表示等待时间,

函数的作用:当获取的键盘事件(键盘码)等于某个数值时,执行某操作。例如if cv2.waitKey(1) == 1: pass。

cv2.setMouseCallback(参数1,参数2)此处的参数1为字符串,表示绑定窗口,参数2为绑定函数的函数名

函数的作用:为名为参数1的窗口绑定鼠标事件,触发后执行参数2函数。

接着举一些例子,来实践一下这些函数

例1:读取一种格式的图像文件,然后将其保存成另一种形式

importcv2

image= cv2.imread('mypic.png')

cv2.imwrite('mypic.jpg', image)

例2:将含有随即字节的bytearray转换为灰度图和BGR图

importcv2importnumpyimportos

randomByteArray= bytearray(os.urandom(120000)) #随机生成长度为120000的字节串,再将其转化成bytearray类型

flatNumpyArray = numpy.array(randomByteArray) #再转化为numpy.array方便操作

grayImage = flatNumpyArray.reshape(300, 400) #重塑为300x400的矩阵(前高后宽)

cv2.imwrite('randomgray.png', grayImage) #保存为单通道的灰度图

bgrImage= flatNumpyArray.reshape(100, 400, 3) #保存为BGR形式

cv2.imwrite('randomcolor.png', bgrImage)

例3:视频文件的读写

importcv2

videoCapture= cv2.VideoCapture('myvideo.mp4') #获取一个视频文件的对象

fps = videoCapture.get(cv2.CAP_PROP_FPS) #获取视频的帧率

size =(int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),

int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))#获取视频画面的宽高

videoWrite = cv2.VideoWriter('Myoutput.avi', cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size) #创建一个即将写入的视频文件对象

success, frame = videoCapture.read() #获取视频文件第一帧的画面

while success: #通过循环写入创建的视频文件

videoWrite.write(frame) #写入一帧

success, frame = videoCapture.read() #读取一帧

例4:捕获摄像头的帧,并保存

importcv2

videoCapture=cv2.VideoCapture(0)

fps= 30size=(int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),

int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))

videoWrite= cv2.VideoWriter('Myoutput.avi', cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)

success, frame=videoCapture.read()

num= 10 * fps - 1

while success and num >0:

videoWrite.write(frame)

success, frame=videoCapture.read()

num-= 1videoCapture.release()#原理与上例类似

例5:在窗口显示图像

importcv2

img= cv2.imread('vacation.png')

cv2.imshow('my image', img)

cv2.waitKey()

cv2.destroyAllWindows()

例6:在窗口显示摄像头的帧

importcv2

clicked=FalsedefonMouse(event, x, y, flags, param):globalclickedif event ==cv2.EVENT_LBUTTONUP:

clicked=True

cameraCapture=cv2.VideoCapture(0)

cv2.namedWindow('MyWindow')

cv2.setMouseCallback('MyWindow', onMouse)print('正在显示摄像头画面,按任意键停止')

success, frame=cameraCapture.read()while success and cv2.waitKey(1) == -1 and notclicked:

cv2.imshow('MyWindow', frame)

success, frame=cameraCapture.read()

cv2.destroyAllWindows()

cameraCapture.release()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值