opencv函数表
Abstract: 整理的一些opencv函数,持续更新中
最近在学习opencv-python,整理了一些学到的函数作为笔记使用,感慨互联网的强大。
函数名 | 作用 | 参数信息 |
---|---|---|
cv2.add(src1, src2, dst=None, mask=None, dtype=None) | 对两张相同大小和类型的图像进行加法运算,或对一张图像与一个标量进行加法运算 | scr1, scr2:进行加法运算的图像,或一张图像与一个 numpy array 标量 dst:输出的图像,可选项,默认值为 None mask:掩模图像,8位灰度格式;掩模图像数值为 0 的像素,输出图像对应像素的各通道值也为 0。可选项,默认值为 None dtype:图像数组的深度,即每个像素值的位数,可选项 若相加后的值大于255,则取255 |
cv2.addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None) | 对两张相同大小和类型的图像进行权重加法 | src1, src2:需要融合相加的两副大小和通道数相等的图像 alpha:src1的权重 beta:src2的权重 gamma:gamma修正系数,不需要修正设置为0 dst:可选参数,输出结果保存的变量,默认值为None,如果为非None,输出图像保存到dst对应实参中,其大小和通道数与输入图像相同,图像的深度(即图像像素的位数)由dtype参数或输入图像确认 dtype:可选参数,输出图像数组的深度,即图像单个像素值的位数(如RGB用三个字节表示,则为24位),选默认值None表示与源图像保持一致 |
cv2.approxPolyDP(curve, epsilon, closed, approxCurve=None) | 以指定的精度逼近多边形曲线 | curve: 2D点的输入向量 approxCurve: 近似的结果 epsilon: 指定近似精度的参数 closed: 如果为真,则近似曲线是闭合的(其第一个和最后一个顶点是已连接);否则,它不关闭 |
cv2.arcLength(curve, closed) | 计算轮廓周长或曲线长度 | curve: 2D点的输入向量 closed: 指示曲线是否闭合 |
cv2.blur(src, ksize, dst=None, anchor=None, borderType=None) | 图像均值滤波 | src:需要处理的图像,即原始图像。它可以有任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F中的一种。 ksize:滤波核的大小。滤波核大小是指在均值处理过程中,其邻域图像的高度和宽度。 anchor:锚点,其默认值是(-1,-1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。 borderType:边界样式,该值决定了以何种方式处理边界。一般情况下不需要考虑该值的取值,直接采用默认值即可 |
cv2.boxFilter(src, ddepth, ksize, dst=None, anchor=None, normalize=None, borderType=None) | 图像方框滤波 | src:需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F中的一种 ddepth:处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度 ksize:滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高 度和宽度 anchor:锚点,其默认值是(-1,-1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点 normalize:表示在滤波时是否进行归一化(这里指将计算结果规范化为当前像素值范围内的值)处理,该参数是一个逻辑值,可能为真(值为1)或假(值为0): 1.当参数normalize=1时,表示要进行归一化处理,要用邻域像素值的和除以面积。此时方框滤波与均值滤波效果相同 2.当参数normalize=0时,表示不需要进行归一化处理,直接使用邻域像素值的和。当 normalize=0时,因为不进行归一化处理,因此滤波得到的值很可能超过当前像素值范围的最大值,从而被截断为最大值。这样,就会得到一幅纯白色的图像 borderType:边界样式,该值决定了以何种方式处理边界 |
cv2.boundingRect(array) | 计算灰度图像的点集或非零像素的右上包围矩形 | array: 输入灰度图像或2D点集 |
cv2.bitwise_and(src1, src2, dst=None, mask=None) | 计算两个数组的位与结果 | src1表示第一个array或scalar类型的输入值 src2表示第二个array或scalar类型的输入值 dst表示与输入值具有同样大小的array输出值 mask表示可选操作掩码,8位单通道array |
cv2.cvtColor(src, code, dst=None, dstCn=None) | 将图像从一种颜色空间转换为另一种颜色空间 | src:输入图像即要进行颜色空间变换的原图像,可以是Mat类 dst:输出图像即进行颜色空间变换后存储图像,也可以Mat类 code:转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片。关于code参数 dstCn:目标图像通道数,如果取值为0,则由src和code决定 |
cv2.copyMakeBorder(src, top, bottom, left, right, borderType, dst=None, value=None) | 填充(扩边)图像,在卷积运算或填充时被用到 | src:源图像 top:顶部方向上的像素数的边框宽度 bottom:底部方向上的像素数的边框宽度 left:左侧像素的边界宽度 right:沿正确方向的像素数的边框宽度 borderType:边界类型 BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhh BORDER_REFLECT: fedcba|abcdefgh|hgfedcb BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba BORDER_WRAP: cdefgh|abcdefgh|abcdefg BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii value:一个可选参数 |
cv2.convertScaleAbs(src, dst=None, alpha=None, beta=None) | 在输入数组的每个元素上,函数convertScaleAbs依次执行三个操作,缩放,获取绝对值,转换为无符号的8位类型:dst(I)=saturate_cast |
src: input array. 输入数组 dst: output array. 输出数组 alpha: optional scale factor. 可选比例因子 beta: optional delta added to the scaled values. 可选增量添加到缩放值 |
cv2.Canny(image, threshold1, threshold2, edges=None, apertureSize=None, L2gradient=None) | Canny 边缘检测是一种使用多级边缘检测算法检测边缘的方法。Canny 边缘检测分为如下几个步骤: 步骤 1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。 步骤 2:计算梯度的幅度与方向。 步骤 3:非极大值抑制,即适当地让边缘“变瘦”。 步骤 4:确定边缘。使用双阈值算法确定最终的边缘信息。 |
image: 为 8 位输入图像。 threshold1: 表示处理过程中的第一个阈值。 threshold2: 表示处理过程中的第二个阈值。 edges: 为计算得到的边缘图像。 apertureSize: 表示 Sobel 算子的孔径大小。 L2gradient: 为计算图像梯度幅度(gradient magnitude)的标识。其默认值为 False。如果为 True,则使用更精确的 L2 范数进行计算(即两个方向的导数的平方和再开方),否则使用 L1 范数(直接将两个方向导数的绝对值相加) |
cv2.contourArea(contour, oriented=None) | 计算轮廓面积 | contour: 2D点的输入向量 oriented: 定向区域标志。如果为True,该函数将根据轮廓方向(顺时针或逆时针)返回一个带符号的面积值。默认情况下,该参数为False,这意味着返回绝对值 |
cv2.createCLAHE(clipLimit=None, tileGridSize=None) | 自适应直方图均衡化 | clipLimit: 颜色对比度的阈值 titleGridSize: 进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作 |
cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None) | 在图像中绘制圆 | img: 图像 center: 圆心 radius: 圆的半径 color: 颜色 thickness: 线宽 lineType: 线的种类 shift: 点坐标的小数位数 |
cv2.calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None) | 图像直方图统计 | images: 原图像的图像格式为 uint8 或 float32。当传入函数时应该用中括号 [] 括来传入,例如[img] channels: 同样用中括号来传入,它会告诉函数统幅的哪幅灰度图的直方图。如果传入的图像是灰度图它的值就是 [0],如果是彩色图像,那么传入的参数可以是 [0]、[1]、[2],它们分别对应着 B、G、R 通道,每个通道的图像都是灰度图 mask:掩模图像。统计整幅图像的直方图时就把它设为 None。但是如果你想统计图像的某一部分区域的直方图的,你就制作一个掩模图像并使用它 histSize:BIN 的数目。也应用中括号括来 ranges: 统计的像素值范围,常为 [0-256] |
cv2.destroyWindow(winname) | 用来释放( 销毁)指定窗口 | |
cv2.destroyAllWindows() | 用来释放( 销毁)所有窗口 | |
cv2.dilate(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None) | 图像膨胀操作 | src:目标图片 kernel:进行操作的核,默认为3×3 dst:与src大小和类型相同的输出图像 anchor:锚在元素中的位置;默认值(-1,-1)表示锚点位于元素中心 iterations:膨胀次数,默认为1 borderType:像素点外延的方法 borderValue:常数边框情况下的边框值 |
cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None) | 在图像中绘制轮廓 | image: 目标图像 contours: 所有输入的轮廓 contourIdx: 选定某个轮廓进行绘制 color: 轮廓的颜色 thinckness: 绘制轮廓的线宽 lineType: 线的种类 hierarchy: 有关图像轮廓的拓扑信息 maxLevel: 绘制轮廓的最高级别 offset: 可选偏移量 |
cv2.erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None) | 图像腐蚀操作 | src:目标图片 kernel:进行操作的核,默认为3×3 dst:与src大小和类型相同的输出图像 anchor:锚在元素中的位置;默认值(-1,-1)表示锚点位于元素中心 iterations:腐蚀次数,默认为1 borderType:像素点外延的方法 borderValue:常数边框情况下的边框值 |
cv2.equalizeHist(src, dst=None) | 均衡灰度图像的直方图 | src: 八位单通道数组 dst: 返回值,与src大小和类型相同的目标图像 |
cv2.findContours(image, mode, method, contours=None, hierarchy=None, offset=None) | 从图像中检索轮廓 | image:8-bit单通道图像。该图像会将非0像素值视为1,0像素值视为0,因此也被视为二值图像。 mode:轮廓检索模式 RETR_EXTERNAL :只检索最外面的轮廓 RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中 RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界 RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次。( 最常用 ) method:轮廓逼近方法 CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,如下图左所示。所有其他方法输出多边形 ( 顶点的序列 ) CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分 contours:返回值,检测到的轮廓。每个轮廓都以点向量的形式存储 hierarchy:返回值,包含有关图像轮廓的拓扑信息 offset:可选偏移量,每个轮廓点偏移量。如果从图像ROI中提取轮廓,然后在整个图像上下文中对其进行分析,这将非常有用 |
cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None) | 图像高斯滤波 | src:输入图像;图像可以具有任何数量的信道,其独立地处理的,但深度应CV_8U,CV_16U,CV_16S,CV_32F或CV_64F dst:输出与图像大小和类型相同的图像src ksize:高斯核大小。 ksize.width 并且 ksize.height 可以有所不同,但它们都必须是正数和奇数。或者,它们可以为零,然后从计算 sigma sigmaX:X方向上的高斯核标准偏差 sigmaY:Y方向上的高斯核标准差;如果 sigmaY 为零,则将其设置为等于 sigmaX;如果两个西格玛均为零,则分别根据ksize.width 和 进行计算 ksize.height,建议指定所有的ksize,sigmaX和sigmaY。 borderType:像素外推方法 |
cv2.imread(filename, flags=None) | 读取图片 | filepath:读入imge的完整路径 flags:标志位,cv2.IMREAD_UNCHANGED cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代 cv2.IMREAD_GRAYSCALE:读入灰度图片,可用0作为实参替代 cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道,可用-1作为实参替代 PS:alpha通道,又称A通道,是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度复信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明 |
cv2.imshow(winname, mat) | 在窗口中显示图像,该窗口和图像的原始大小自适应 | winname:字符串,显示窗口的名称 img:所显示的 OpenCV 图像,nparray 多维数组 函数 cv2.imshow() 之后要用 waitKey() 函数设定图像窗口的显示时长,否则不会显示图像窗口 |
cv2.imwrite(filename, img, params=None) | 保存图像 | filename:要保存的文件的路径和名称,包括文件扩展名 img:要保存的 OpenCV 图像,nparray 多维数组 paras:不同编码格式的参数,可选项 cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高; cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100; cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大 |
cv2.Laplacian(src, ddepth, dst=None, ksize=None, scale=None, delta=None, borderType=None) | Laplacian(拉普拉斯)算子是一种二阶导数算子,其具有旋转不变性,可以满足不同方向的图像边缘锐化(边缘检测)的要求。通常情况下,其算子的系数之和需要为零 | dst: 目标图像 src: 原始图像 ddepth: 目标图像的深度 ksize: 用于计算二阶导数的核尺寸大小。该值必须是正的奇数。当ksize的值为1时,Laplacian算子计算时采用的 3×3的核如上所示 scale: 计算Laplacian值的缩放比例因子,该参数是可选的。默认情况下,该值为 1,表示不进行缩放 delta: 加到目标图像上的可选值,默认为0 borderType: 边界样式 |
cv2.merge(mv, dst=None) | 图像通道的合并 | mv:要合并的单通道 dst:通道合并的图像,nparray 多维数组 |
cv2.medianBlur(src, ksize, dst=None) | 图像中值滤波 | src:是需要处理的图像,即源图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F中的一种。 ksize:是滤波核的大小。滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度。需要注意,核大小必须是比1大的奇数,比如3、5、7等 dst:与src大小和类型相同的目标数组 |
cv2.morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None) | 图像形态学操作 | src:输入图像,输入图像的通道数是任意的 op:形态操作的类型kernel:输入一个数组作为核 关于参数 anchor:核的锚点位置,负值说明该锚点位于核中心。默认为核中心 iterations:腐蚀与膨胀被应用的次数。默认为None borderType:像素边界扩展类型 borderValue:边界为常量时的边界值。默认值有特殊含义。默认值为None |
cv2.matchTemplate(image, templ, method, result=None, mask=None) | 模板匹配 | image: 待搜索的原图 templ: 模板图像 result: 匹配的结果 method: 进行匹配的方法 关于method参数 mask: 掩膜,尺寸必须和templ相同;如果您只想检测模板图像上的特定区域,则可以为模板图像提供一个掩膜;掩膜,即为模板图像上感兴趣的区域,用于忽略模板图像上无用的干扰的特征,即不属于检测目标的干扰特征。对于模板上你不希望被搜索的区域,掩膜值应该设置为0。对于模板图像上您要进行搜索的区域,掩膜值应该设置为255。掩膜与模板图像具有相同的维度,并且每个元素的类型也需要一致 |
cv2.minMaxLoc(src, mask=None) | 找出一个数组中的最大值和最小值 | src: 输入的单通道数组 mask: 选择子数组的掩膜 |
cv2.namedWindow(winname, flags=None) | 新建一个显示窗口,可以指定窗口的类型 | winname:新建的窗口的名称 flags:窗口的标识,一般默认为WINDOW_AUTOSIZE WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改 WINDOW_NORMAL 用户可以改变这个窗口大小 WINDOW_OPENGL 窗口创建的时候会支持OpenGL |
cv2.pyrDown(src, dst=None, dstsize=None, borderType=None) | 对图像进行滤波然后进行下采样。从一个高分辨率大尺寸的图像向上构建一个金字塔(尺寸变小,分辨率降低) | src:输入图像 dst:输出图像 dstsize:输出图像的大小 borderType:图像边界的处理方式 |
cv2.pyrUp(src, dst=None, dstsize=None, borderType=None) | 对图像进行滤波然后进行上采样。从一个低分辨率小尺寸的图像向下构建一个金子塔(尺寸变大,但分辨率不会增加) | src:输入图像 dst:输出图像 dstsize:输出图像的大小 borderType:图像边界的处理方式 |
cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) | 对图片进行缩放 | src :原图像,即待改变大小的图像 dsize:输出图像的大小,如(300,300) dst: 改变后的图像。这个图像和原图像具有相同的内容,只是大小和原图像不一样而已 fx:width方向的缩放比例 fy:height方向的缩放比例 interpolation:这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,有以下几种: INTER_NEAREST - 最邻近插值 INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法 INTER_CUBIC - 4x4像素邻域内的双立方插值 INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值 |
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None) | 绘制简单、粗或填充的矩形。 | img: 图像 pt1: 矩形的顶点 pt2: pt1的对角点 color: 线条颜色 thickness: 线宽 lineType: 线的种类 shift: 点坐标的小数位数 |
cv2.split(m, mv=None) | 图像颜色通道分离 | m:图像数据,nparray 多维数组 mv:指定的分拆通道(可选) |
cv2.Sobel(src, ddepth, dx, dy, dst=None, ksize=None, scale=None, delta=None, borderType=None) | 利用Sobel算子进行图像梯度计算 | src:输入图像 ddepth: 输出图像的深度(可以理解为数据类型),-1表示与原图像相同的深度 dx,dy: 当组合为dx=1,dy=0时求x方向的一阶导数,当组合为dx=0,dy=1时求y方向的一阶导数(如果同时为1,通常得不到想要的结果) dst: 输出图像,和src同类型 ksize:(可选参数)Sobel算子的大小,必须是1,3,5或者7,默认为3。求X方向和Y方向一阶导数时,卷积核分别为: scale:(可选参数)将梯度计算得到的数值放大的比例系数,效果通常使梯度图更亮,默认为1 delta:(可选参数)在将目标图像存储进多维数组前,可以将每个像素值增加delta,默认为0 borderType:(可选参数)决定图像在进行滤波操作(卷积)时边沿像素的处理方式,默认为BORDER_DEFAULT |
cv2.Scharr(src, ddepth, dx, dy, dst=None, scale=None, delta=None, borderType=None) | 该算子具有和 Sobel 算子同样的速度,且精度更高。可以将 Scharr 算子看作对 Sobel 算子的改进 | dst: 代表输出图像 src: 代表原始图像 ddepth: 代表输出图像深度。该值与函数 cv2.Sobel()中的参数 ddepth 的含义相同 dx: 代表 x 方向上的导数阶数 dy: 代表 y 方向上的导数阶数 dst: 输出图像,和src同类型 scale: 代表计算导数值时的缩放因子,该项是可选项,默认值是 1,表示没有缩放 delta: 代表加到目标图像上的亮度值,该项是可选项,默认值为 0 borderType: 代表边界样式 |
cv2.threshold(src, thresh, maxval, type, dst=None) | 普通阈值函数 | src:灰度图像 thresh:起始阈值 maxval:最大值 type:定义处理数据与阈值的关系 关于type参数 dst:输出大小和类型以及通道数与src相同的阵列 |
cv2.waitKey(delay=None) | 在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下键,则继续等待 (循环)。不断刷新图像 , 频率时间为delay , 单位为ms,返回值为当前键盘按键值,设置 waitKey(0) , 则表示程序会无限制的等待用户的按键事件 |
各算子的核:
关于cv2.cvtColor的code参数:
关于cv2.morphologyEx的op参数:
关于cv2.threshold的type参数:
关于cv2.matchTemplate的method参数:
- TM_SQDIFF:计算平方不同,计算出来的值越小,越相关。
- TM_CCORR:计算相关性,计算出来的值越大,越相关。
- TM_CCOEFF:计算相关系数,计算出来的值越大,越相关。
- TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0,越相关。
- TM_CCORR_NORMED:计算归一化相关性,计算出来的值越接近1,越相关。
- TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1,越相关。
参考:
https://blog.csdn.net/LaoYuanPython/article/details/109016144
https://blog.csdn.net/LaoYuanPython/article/details/109143281
https://blog.csdn.net/qq_49478668/article/details/123217030
https://blog.csdn.net/qq_49478668/article/details/123342188
https://aistudio.csdn.net/62e38a8fcd38997446774d21.html
https://blog.csdn.net/weixin_45335726/article/details/122413457
https://blog.csdn.net/aiden_yan/article/details/117233106
https://blog.csdn.net/sunjintaoxxx/article/details/121420594
https://blog.csdn.net/weixin_44015965/article/details/109547129
https://youcans.blog.csdn.net/article/details/121169054
https://blog.csdn.net/youcans/article/details/121174740
https://blog.csdn.net/qq_49478668/article/details/123485382
https://www.jianshu.com/p/ea253fff2289
https://blog.csdn.net/qq_39507748/article/details/104539673
https://blog.csdn.net/fanjiule/article/details/81606596
https://blog.csdn.net/weixin_41466575/article/details/113058802
https://blog.csdn.net/weixin_42272768/article/details/110746790
https://blog.csdn.net/qq_39377418/article/details/101393007
https://blog.csdn.net/weixin_36670529/article/details/113755647
https://blog.csdn.net/Dontla/article/details/103201651
https://blog.csdn.net/m0_51402531/article/details/121065844
https://blog.csdn.net/qq_49478668/article/details/123808815
https://blog.csdn.net/m0_51402531/article/details/121066693
https://blog.csdn.net/Easen_Yu/article/details/89381410
https://blog.csdn.net/csdn1e/article/details/112951642
https://www.cnblogs.com/IllidanStormrage/articles/16288609.html