Python-OpenCV常用函数的参数及参数意义
可以通过 ctrl + f 来寻找所需的函数
#一. 读入图像
#####1. cv2.imread():
- 第一个参数是该图像的路径,
- 第二个参数是告诉函数该以何种方式去读取图片;
- cv2.IMREAD _ COLOR:读入一副彩色图像。图像的透明度会被忽略,这是默认参数。
- cv2.IMREAD _ GRAYSCALE:以灰度模式读入图像
- cv2.IMREAD _ UNCHANGED:读入一幅图像,并且包括图像的alpha通道
#二. 显示图像
#####1. cv2.imshow():
- 第一个参数是窗口的名字
- 第二个是我们图像
#####2. cv2.waitKey(): - 是一个键盘绑定函数,函数等待特定的几毫秒,看是否有键盘输入,如果按下任意键,函数会返回按键的ASCI码值,程序将会继续进行;如果没有键盘输入,返回值为-1,如果我们设置这个函数的参数为0,那么他将会无限等待键盘输入。
#####3. cv2.destoryAllWindows(): - 可以删除任何我们建立的窗口
#####4. cv2.destoryAllWindow(): - 可以在括号中输入你想删除的窗口名
#####5. cv2.namedWindow(): - 决定窗口是否可以调整大小。
- 第一个参数为窗口名
- 第二个参数为判断窗口是否可以调整大小,初始设定函数的第二个参数为 cv2.WINDOW_AUTOSIZE,若改为cv2.WINDOW _ NORMAL就可以调整窗口大小了
#三. 保存图像
#####1. cv2.imwrite():
- 第一个参数为想要保存成的文件名
- 第二个参数为你要保存的图像变量。
#四.用摄像头捕获视频
#####1. cv2.VideoCapture():
- 参数为设备的索引号,或者一个视频文件。设备索引号就是在指定要使用的摄像头,电脑的内置摄像头的索引号为0,也可以通过设置成1或者其他的来选择别的摄像头。
- eg.cap=cv2.VideoCapture(0)
#####2. cap.release(): - 停止捕获视频
#####3. cap.read(): - 返回一个布尔值,如果帧读取正确就是True,可以通过他的返回值来检查视频文件是否达到结尾。
#####4. cap.isOpened(): - 检查是否成功初始化摄像头设备,如果初始化成功,则返回True,否则就要使用函数cap.open()。
#####5. cap.get(propld): - 获得视频的一些参数信息,这里propld可以是0到18的任何整数,每个数代表视频的一个属性。
1~18每个数代表的属性
#####6. cap.set(propld,value): - 修改视频的属性,value就是你想要设置成的新值
#五. 保存视频
#####1. cv2.VideoWriter_fourcc():
视频解码器
#####2. cv2.flip():实现视频翻转。
翻转相关的参数
#六. 用Opencv绘图
#####1. cv2.line():
- 划线函数,需要告诉函数这条线的起点和终点;
- 第一个参数img:要划的线的所在的图像;
- 第二个参数pt1:直线起点;
- 第三个参数pt2:直线终点;
- 第四个参数color:直线的颜色;
- 第五个参数thickness:线条的粗细
#####2. numpy.zeros(shape,dtype=float,order=‘C’): - 返回给定形状和类型的新数组,用 0 填充;用来创建一个画布。
zeros参数和例子
zeros第一个参数为三维列表
#####3. cv2.rectangle(): - 画矩形函数,需要告诉函数矩形的左上角顶点和右上角顶点的坐标;
- 第一个参数img:要划的矩形的所在的图像;
- 第二个参数pt1:矩形的左上角顶点;
- 第三个参数pt2:矩形的右上角顶点;
- 第四个参数color:矩形边框的颜色;
- 第五个参数thickness:边框线条的粗细,-1是为填充。
#####4. cv2.circle(): - 画圆形函数,需要告诉函数圆形的中心坐标和半径的大小;
- 第一个参数img:要画的圆形的所在的图像;
- 第二个参数center:圆形的中心坐标点;
- 第三个参数radius:圆形的半径;
- 第四个参数color:圆形边框的颜色;
- 第五个参数thickness:边框线条的粗细,-1是为填充 。
#####5. cv2.ellipse(): - 画椭圆的函数,需要告诉函数中心点位置,长轴和短轴的长度,整个椭圆的旋转角度(正数为顺时针旋转,负数为逆时针旋转),绘制椭圆的起始角度和终止角度;
- 第一个参数img:要画的椭圆所在的图像;
- 第二个参数center:椭圆的中心坐标点;
- 第三个参数axes:椭圆的长轴和短轴的长度;
- 第四个参数angle:整个椭圆的旋转角度;
- 第五个参数startAngle:绘制椭圆的起始角度;
- 第六个参数endAngle:绘制椭圆的终止角度;
- 第七个参数color:线条颜色;
- 第八个参数thickness:线条粗细
ellipse参数和例子
#####6. numpy.array(): - 创建一个数组矩阵;
- 前面n个参数为 N 个维度的数组;
- 最后一个参数为数组的数据类型。
#####7. reshape(): - 用于改变数组的形状
reshape的具体用法
#####8. cv2.polylines(): - 画多边形的形状;需要告诉函数每个顶点的坐标。
- 第一个参数img:要绘制的多边形的图像;
- 第二个参数list:多边形的顶点的列表;
- 第三个参数bool:True表示图像闭合,False表示多边形不闭合;
- 第四个参数color:线条的颜色;
- 第五个参数thickness:线条粗细
#####9. cv2.putText(): - 添加文字函数;
- 第一个参数img:要添加文字的图像;
- 第二个参数是str(i):添加的文字;
- 第三个参数pt:文字左上角的坐标;
- 第四个参数font:字体;
- 第五个参数size:字体大小;
- 第六个参数color:字体的颜色;
- 第七个参数thickness:字体的粗细;
可以供选择的字体
#七,把鼠标当画笔
#####1. 可以用下列的代码查看所有被支持的鼠标事件
import cv2
events = [i for i in dir(cv2) if 'EVENT' in i]
print(events)
鼠标事件
#####2. cv2.setMouseCallback():
-
将窗口与鼠标事件绑定在一起。
-
第一个参数windowName:窗口名称;
-
第二个参数MouseCallback:鼠标响应回调函数;
-
第三个参数param:响应函数传递的参数
利用鼠标事件完成绘图的代码例子import cv2 import numpy as np def draw_circle(event,x,y,flags,param): if event == cv2.EVENT_LBUTTONDBLCLK: cv2.circle(img,(x,y),100,(255,0,0),-1) # 新建图像窗口并将窗口与回调函数绑定 img = np.zeros((512,512,3),np.uint8) cv2.namedWindow('image') cv2.setMouseCallback('image',draw_circle) while(1): cv2.imshow('image',img) if cv2.waitKey(20)&0xFF==27: break cv2.destoryAllWindows()
#####3.Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
#八,图像的基础操作
#####1. 获取并修改像素值
>- img.item()
>- img.itemset()
获取修改像素值的详解
#####2. 获取图像的属性
#####图像的属性包括:行,列,通道,图像数据类型,像素数目等
#####img.shape():
-
可以获取图像的形状,返回值是一个包含行数,列数,通道数的元组;
-
img.shape[:2]:取彩色图片的高宽;
-
img.shape[:3]:取彩色图片的高,宽,通道
#####img.size: -
可以返回图像的像素数目
#####img.dtype: -
可以返回图像的数据类型
#####3. 图像ROI:ROI指感兴趣区域
#####4. 将图片中某行某列拷贝到某行某列
eg:img = cv2.imread('1.jpg') ball = img[280:340,330:390] img[273:333,100:160] = ball
#####5.拆分及合并图像通道
-cv2.split():通道分离函数,得到各个通道的灰度图
-cv2.merge():通道合并函数
python3+opencv 图像通道的分离(split()函数)和合并(merge()函数)
#####6. 为图像扩边(填充)
#####cv2.copyMakeBorder(): 用来给图片添加边框;
- 第一个参数src:要处理的原图;
- 第二~五个参数top,bottom,left,right:上下左右要扩展的像素数;
- 第六个参数borderType:边框类型;
- cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要 下一个参数(value)
- cv2.BORDER_REFLECT 边界元素的镜像。比如: fedcba|abcdefgh|hgfedcb
- cv2.BORDER _ REFLECT _ 101 or cv2.BORDER _ DEFAULT 跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba
- cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa| abcdefgh|hhhhhhh
- cv2.BORDER_WRAP 不知道怎么说了, 就像这样: cdefgh| abcdefgh|abcdefg
图像扩边的代码示例
-
第七个参数value :如果borderType设置为BORDER_CONSTANT(纯色边框),则这个参数为边框的颜色
#####7.图像加法
#####cv2.add(): -
将两幅图像进行加法运算,两幅图像的大小,类型必须一致,或者第二个图像可以是一个简单的标量值。
x = np.uint8([250]) y = np.uint8([10]) print(cv2.add(x,y)) [[255]] #250+10=260=>255 print(x+y) [4]#250+10=260%256=4
#####8.图像减法
#####cv2.subtract():
- 第一个参数src1:第一张图片
- 第二个参数src2:第二张图片
- 第三个参数dst:目标图像,需要提前分配空间,可省略
- 第四个参数mask:8位单通道数组,指定要更改的输出数组的元素。
- 第五个参数dtype:输出数组的深度,默认等于-1
#####9.图像混合
#####计算公式:g(x)=(1-a)f0(x)+af1(x)
#####cv2.addWeighted():
- 将两个图像混合在一起;
- 第一个参数src1:第一个原数组;
- 第二个参数alpha:第一个数组元素权重;
- 第三个参数src2:第二个原数组;
- 第四个参数beta:第二个数组元素权重;
- 第五个参数gamma:图1和图2作和后添加的数值。
#####10.图像按位运算:
#####bitwise_and(),bitwise_or(),bitwise_not(): - 与掩膜进行运算;
- 第一个参数src1:第一个输入数组或标量;
- 第二个参数src2:第二个输入数组或标量;
- 第三个参数dst:输出与输入具有相同大小和类型的数组;
- 第四个参数:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素
按位运算的利用
#九,程序性能检测及优化
#####1. cv2.getTickCount():
- 返回从参考点到这个函数被执行的时钟数;
#####2. cv2.getTickFrequency(): - 返回时钟频率,或者说每秒钟的时钟数;
#####3. 一般情况下,Opencv的函数要比Numpy函数快。
#十