Python-OpenCV常用函数的参数及参数意义

本文详细介绍了Python-OpenCV库中涉及图像处理的各种函数,包括读取和显示图像、图像保存、视频捕获、颜色空间转换、几何变换、图像阈值处理、滤波与卷积、直方图分析、模板匹配、Hough变换、分水岭图像分割、视频分析、背景减除、图像去噪以及图像修补等。每个函数都附带了参数说明和示例,是理解OpenCV函数用法的重要参考资料。
摘要由CSDN通过智能技术生成

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函数快。

#十

  • 12
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值