opencv 轻松入门学习 api总结

本文根据opencv 轻松入门 面向python总结的,便于查找,每个函数都对应书里页码,可以看我语雀排版好的
https://www.yuque.com/nuanyanggaozhao/glvn9z/smagn3

1.入门基本api

1.图像读取 imread

retval = cv2.imread( filename [, flags])
  • retval 是返回值,其值是读取到的图像。如果未读取到图像,则返回“None”
  • filename 表示要读取的图像的完整文件名
  • flags 是读取标记。该标记用来控制读取文件的类型
    | 值 | 含义 | 数值 |
    | — | — | — |
    | cv2.IMREAD_COLOR | 将图像调整为3通道的BGR图像。这是默认值 | 1 |
    | cv2.IMREAD_GRAYSCALE | 以灰色模式加载图像 | 0 |
    | cv2.IMREAD_UNCHANGED | 保持原格式不变 | -1 |
    | 详细见书P3-4 | | |

2.图像显示 imshow

None = cv2.imshow( 窗口名称,图像)
key = cv2.waitkey(0) #这个0,是表示一直停在界面无限等待

其中waitkey里的参数,不写就是键盘按什么返回什么
key == ord(’ A ') 可以用ord将键盘转换为ASCII码去跟返回的值比较

3.保存图像

retval = cv2.imwrite( filename, img[, params])
  • retval 是返回值,保存成功True,反之False
  • filename 表示要保存的图像的完整文件名.拓展名
  • img 是被保存图像的名称
  • params 保存类型参数,可选

2.图像处理

3.图像运算

加号运算

使用“+”运算,图像a,图像b,公式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MsVEJMJK-1624751668875)(https://cdn.nlark.com/yuque/__latex/54c90174a75a910f64fbc38a15a1c01a.svg#card=math&code=a%20%2B%20b%20%3D%0A%5Cbegin%7Bcases%7D%0Aa%20%2B%20b%2C%20%20%26%20%5Ctext%7Ba%20%2B%20b%20%E2%89%A4%20255%7D%20%5C%5C%5B2ex%5D%0Amod%EF%BC%88a%20%2B%20b%2C%20256%EF%BC%89%2C%20%26%20%5Ctext%7Ba%20%0A%20%2B%20b%20%3E%20255%7D%0A%5Cend%7Bcases%7D&id=r7Bhg)]

cv2.add

两个加起来,超过255,那就是取255

cv2.addWeighted >>书P40
dst = cv2.addweighted(src1, alpha, src2, beta, gamma)

图1,图1权重,图2,图2权重,混合图片亮度

逻辑运算 与或非 >>P43
cv2.bitwise_and()  # 与
cv2.bitwise_or()   #或
cv2.bitwise_xor()  #按位异或
cv2.bitwise_not    #按位取反

4.色彩空间

1.cvtColor >>P83

cv2.cvtColor( src, code [, dstCn])

2.inRange >>P97

dst = cv2.inRange( src, lowerb, upperb)

5.几何变换

1.缩放 cv2.resize P106

dst = cv2.resize( src, dsize[, fx[, fy[, interpolation]]])
  • dsize 代表输出图像大小
  • fx 代表水平方向的缩放比例
  • fy 代表垂直方向的缩放比例
  • interpolation 代表插值方式 见书

2.翻转 cv2.flip P110

# filpCode 翻转类型,x轴 0,/ y轴 正数 / xy同时,负数
dst = cv2.flip( src, filpCode)

3.仿射 cv2.warpAffine P111

dst = cv2.warpAffine( src, M, dsize[, flags[, borderMode[, borderValue]]])
  • M 代表一个2x3的变换矩阵。不同的矩阵不同的效果
旋转 P113
可以用cv2.getRotationMatrix2D( center, angle, scale)去生成M
负责的仿射 P114
# M生成
retval = cv2.getAffineTransform( sec, dst)

4.透视 cv2.warpPerspective P115

dst = cv2.warpPerspective( src, M, dsize[, flags[, borderMode[, borderValue]]])

5.重映射 cv2.remap P117

dst = cv2.remap( src, map1, map2, interpolation[, borderMode[, borderValue]])

此函数功能可以复制P119,翻转P121,xy轴互换P126

6.阈值处理

1.cv2.threshold P130

retval, dst = cv2.threshold( src, thresh, maxval, type)
  • retval 代表返回的阈值
  • thresh,maxval 两个阈值
  • type 常用参数,cv2.THRESH_RINARY,二值化处理 其他见书
  • type 要是 cv2.THRESH_RINARY + cv2.THRESH_OTSU,就是会自动计算最优阈值,并且返回计算的阈值大小,P141有介绍

2.自适应阈值 cv2.adaptiveThreshold P139

dst = cv2.adaptiveThreshold( src, maxValue, adaptiveMethod, thresholdType, blockSize, c)
  • maxValue 最大值
  • adaptiveMethod 自适应方法
  • thresholdType 阈值处理方式,必须是cv2.THRESH_BINARY,cv2.THRESH_BINARY_INV其中一个
  • blockSize 块的大小。表示一个像素在计算其阈值时所用的领域尺寸,一般为3,5,7

7.图像平滑处理

1.均值滤波cv2.blur P150

dst = cv2.blur( src, ksize, anchor, borderType)
  • ksize 是滤波核的大小。滤波核大小指在均值处理过程中,其领域图像的高度和宽度。其指可以是(5,5)
  • anchor 是锚点,默认值是(-1,-1),表示当前计算均值的点位于核的中间点位置

2.方框滤波 cv2.boxFilter P152

dst = cv2.boxFilter( src, ddepth, ksize, anchor, normalize, borderType)
  • ddepth 处理图像的深度,一般-1,表示与原始图像使用相同的图像深度
  • ksize 是滤波核大小
  • normalize 表示在滤波时是否进行归一化,1表示进行归一化,要用领域像素值的和除以面积,0不用,但可能因为加起来的值大于255,数值截断,画面变成白色的了

3.高斯滤波 cv2.GaussianBlur P158

dst = cv2.GaussianBlur( src, ksize, sigmaX, sigmaY, borderType)
  • sigmaX 是卷积核在水平方向上(x轴方向)的标准差,其控制的是权重比例(参数必须要)
  • sigmaY 是卷积核在垂直方向上(Y轴方向)的标准差,如果为0,则只才用sigmaX

4.中值滤波 cv2.medianBlur P161

# 去噪效果很好
dst = cv2.medianBlur( src, ksize)
  • ksize 滤波核大小,必须是单数且大于1,如3,5,7

5.双边滤波 cv2.bilateralFilter P164

dst = cv2.bilateralFilter( src, d, sigmaColor, sigmaSpace, borderType)
  • d 是滤波时选取的空间距离参数,表示以当前像素点为中心点的直径,推荐用d=5,较大噪声可以用9

6.2D卷积 cv2.filter2D P166

dst = cv2.filter2D( src, ddepth, kernel, anchor, delta, borderType)
  • kernel 是卷积核,是一个单通道的数组。要是想在彩色通道使用,就得拆分通道一个一个处理
  • dalta 修正值

8.形态学操作

1.腐蚀cv2.erode P170

dst = cv2.erode( srrc, kernel[, anchor[, iterations[, borderType[, borderValue]]]])
  • iterations 腐蚀操作迭代次数,默认1

2.膨胀 cv2.dilate P176

dst = cv2.dilate( src, kernel[, anchor[, iterations[, borderType[, borderValue]]]])

3.通用形态学函数 cv2.morphologyEx P178

dst = cv2.morphologyEx( src, op, kernel[, anchor[, iterations[, borderType[, borderValue]]]])
  • op 操作类型
    | 类型 | 说明 | 含义 | 作用 | 页码 |
    | — | — | — | — | — |
    | cv2.MORPH_ERODE | 腐蚀 | 腐蚀 | ​
    | ​
    |
    | cv2.MORPH_DILATE | 膨胀 | 膨胀 | ​
    | ​
    |
    | cv2.MORPH_OPEN | 开运算 | 先腐蚀在膨胀 | 用于去噪、计数 | 179 |
    | cv2.MORPH_CLOSE | 闭运算 | 在膨胀在腐蚀 | 有助与关闭前景物体内部小孔,或去除物体上的小黑点,还可以将不同的前景图像进行衔接 | 180 |
    | cv2.MORPH_GRADIENT | 形态学梯度运算 | 膨胀图减腐蚀图 | 得到原始图像的边缘 | 182 |
    | cv2.MORPH_TOPHAT | 礼帽运算 | 原始图像减开运算所得图像 | 能够获得图像的噪声信息,或者得到比原始图像更亮的边缘信息 | 184 |
    | cv2.MORPH_BLACKHAT | 黑帽运算 | 闭运算所得图像减原视图像 | 获取图像内部的小孔,或前景色中小黑点,或者得到比原始图像边缘更黑暗的边缘部分 | 185 |
    | cv2.MORPH_HITMISS | 击中击不中 | 前景背景腐蚀运算的交集,仅仅支持CV_8UCI二进制图像 | ​
    | ​
    |

4.核函数 cv2.getStructuringElement P186

retval = cv2.getStructuringElement( shape, ksize[, anchor])
  • shape 操作类型 cv2.MORPH_RECT 矩形,所有元素都是1, cv2.MORPH_CROSS,十字形,对角1, cv2.MORPH_ELLIPSE 椭圆形

9.梯度图像

1.Sobel算子 cv2.Sobel P191

dst = cv2.Soble( src, ddepth, dx, dy[, ksize[, delta[, borderType]]])
  • ddepth 一般用cv2.CV_64F
  • dx x方向上的求导阶数
  • dy y方向上的求导阶数
  • ksize Sobel核大小,-1就会用Scharr算子

2.Scharr算子 P200

dst = cv2.Scharr( src, ddepth, dx, dy[, scale[, delta[, borderType]]])
  • scale 缩放因子,默认是1及没有缩放

3.拉布拉斯算子 cv2.Laplacian P206

dst = cv2.Laplacian( src, ddepth, dx, dy[, ksize[, delta[, borderType]]]))

10.Canny 边缘检测 P209

步骤

1)使用高斯滤波器,以平滑图像,滤除噪声。
2)计算图像中每个像素点的梯度强度和方向。
3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
5)通过抑制孤立的弱边缘最终完成边缘检测。

![](https://img-blog.csdnimg.cn/img_convert/106983926a2ce17c4982275b26df3dbc.png#from=url&id=wQ3SI&margin=[object Object]&originHeight=238&originWidth=752&originalType=binary&ratio=1&status=done&style=none)

11.图像金字塔

1.高斯金字塔向下采样 cv2.pyrDown P217

# 一层下一层,宽高为原来一半
dst = cv2.pyrDown( src[, dstsize[, borderType]])

2.高斯金字塔向上采样 cv2.pyrUp P219

# 一层上一层,宽高为原来2倍
dst = cv2.pyrDown( src[, dstsize[, borderType]])

3.拉普拉斯金字塔 P223

为了恢复高分辨率的图像

  • 表示拉普拉斯金字塔的第i层
  • 表示高斯金字塔的第i层

12.图像轮廓

1.查找轮廓 cv2.findContours P229

image, contours, hierarchy = cv2.findContours( image, mode, method)
  • contours 返回的轮廓,全部轮廓,数组
  • hierarchy 图像拓扑信息(4版本没有了)
  • mode 轮廓检索模式,一般用cv2.RETR_EXTERNAL,只检测外轮廓,更多参数请看P232
  • method 轮廓的近似方法

2.绘制图像轮廓cv2.drawContours P237

image = cv2.drawContours( image,contours, contourIdx, color[, thickness[, lineType]])
  • contours 所要画的轮廓
  • contourIdx 一般-1,表示全画
  • color 颜色
  • thickness 轮廓粗细大小,-1表示实心
  • lineType 轮廓的样式

3. 矩的计算 cv2.moments P241

retval = cv2.moments( array[, binaryImage])

4.计算轮廓面积 cv2.contourArea P243

retval = cv2.contourArea( contour [, oriented])

5.轮廓长度 cv2.arcLength P246

retval = cv2.arcLength  ( contour, closed)
  • closed 是否是封闭的,True 是封闭的

6.Hu矩函数cv2.HuMoments P248

hu = cv2.HuMoments( m )
  • hu 数组返回7个,一般只用到第一个,hu[0]
  • m 由cv2.moments计算得来的矩阵特征值

7.形状匹配cv2.matchShapes P252

retval = cv2.matchShapes( contour1, contour2, method, parameter)

8.轮廓拟合 cv2.boundingRect P254

retval = cv2.boundingRect( array )
  • retval 返回矩形边界的左上角顶点的坐标值及矩形边界的宽度和高度

9.最小包围矩形框 cv2.minAreaRect P257

retval = cv2.minAreaRect( points )
  • retval 返回的是最小外接矩形的中心(x,y) 宽度高度 旋转角度
  • 注意,这个返回值不能直接用cv2.drawContours去画出来,需要dst = cv2.boxPoints( retval 转化的dst去画

10.最小包围圆形 cv2.minEnclosingCircle P259

center, radius = cv2.minEnclosingCircle( points )

11.最优拟合椭圆 cv2.fitEllipse P260

retval = cv2.fitEllipse( points )

12.最优拟合直线 cv2.fitLine P261

line = cv2.fitLine( points, disType, param, reps, aeps)

13.最小外包三角形 cv2.minEnclosingTriangle P262

retval, triangle = cv2.minEnclosingTriangle( points )

14.逼近多边形 cv2.approxPolyDP P263

approxCurve = cv2.approxPolyDP( curve, epsilon, closed)

15.凸包 cv2.convexHull P266

hull = cv2.convexHull( points[, clockwise[, returmnPoints]])

16.凸缺陷 cv2.convexityDefects P268

convexityDefects = cv2.convexityDefects( contour, convexhull)

17.检测是都是凸形 cv2.isContourConvex P270

retval = cv2.isContourConvex( contour )

18.点到轮廓的距离 cv2.pointPolygonTest P272

retval = cv2.pointPolygonTest( contour, pt, measureDist)

19.计算场景距离 cv2.createShapeContextDistanceExtractor P275

20.计算Hausdorff距离 cv2.createHausdorfDistanceExtractor P278

21.cv2.findNonZero P289

22.找最大最小以及他们的位置 cv2.minMaxLoc P291

23.平均颜色及平均灰度 cv2.mean P293

24.极点 tuple P294

leftmost = typle( cnt[cnt[:, :, 0].argmin()][0])
rightmost = typle( cnt[cnt[:, :, 0].argmax()][0])
topmost = typle( cnt[cnt[:, :, 1].argmin()][0])
bottommost = typle( cnt[cnt[:, :, 1].argmax()][0])
  • cnt 表示轮廓

13.直方图处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值