python进阶—OpenCV之常用图像操作函数说明
文章目录
- cv2.threshold
- cv2.bitwise_and
- cv2.bitwise_or
- cv2.bitwise_not
- cv2.inRange
- cv2.resize
- cv2.adaptiveThreshold
- cv2.warpAffine仿射
- cv2.getRotationMatrix2D
- cv2.warpPerspective投射
- cv2.getAffineTransform
- cv2.getPerspectiveTransform
经过近一个月的学习,发现对图像的一些基本操作函数还是理解的不够透彻,因此觉得把一些常用的图像操作函数拿出来加深理解并记录下很有必要,方便以后查询。
cv2.threshold
函数原型:threshold(src, thresh, maxval, type, dst=None)获取二值化图像;一般用于灰度图图像的二值化
- 函数返回值:ret,dst;该函数有两个返回值,ret是用type为THRESH_OTSU或者THRESH_TRIANGLE方法计算出的阈值;dst是阈值化后的图像
- src:输入的待二值化图像
- thresh:阈值,可由参数指定;或者由type参数确定计算方法
- maxval:像素最大取值
- type:THRESH_BINARY、THRESH_BINARY_INV、THRESH_TOZERO、THRESH_TOZERO_INV、THRESH_TRUNC;另外THRESH_OTSU、THRESH_TRIANGLE为阈值计算方法,可与前5个进行
|
运算后赋值给type参数 - THRESH_BINARY:像素值 < thresh,像素值取为0;像素值 > thresh,像素值取为maxval
- THRESH_BINARY_INV:像素值 < thresh,像素值取为maxval;像素值 > thresh,像素值取为0
- THRESH_TOZERO:像素值 < thresh,像素值取为0;像素值 > thresh,像素值保持不变
- THRESH_TOZERO_INV:像素值 < thresh,像素值保持不变;像素值 > thresh,像素值取为0
- THRESH_TRUNC:像素值 < thresh,像素值保持不变;像素值 > thresh,像素值取为maxval
- THRESH_OTSU:用于具有(图像的像素直方图)双波峰的灰度图像的二值化
- THRESH_TRIANGLE:用于具有(图像的像素直方图)单波峰的灰度图像的二值化
cv2.bitwise_and
函数原型:bitwise_and(src1, src2, dst=None, mask=None)
- 函数返回值:调用时若无mask参数则返回src1 & src2,若存在mask参数,则返回src1 & src2 & mask
- src1:输入原图1
- src2:输入原图2,src1与src2可以相同也可以不相同,可以是灰度图像也可以是彩色图像
- dst:若存在参数时:src1 & src2 或者 src1 & src2 & mask
- mask:可以是单通道8bit灰度图像,也可以是矩阵,一般为二值化后的图像
cv2.bitwise_or
函数原型:bitwise_or(src1, src2, dst=None, mask=None)
- 函数返回值:调用时若无mask参数则返回src1 | src2,若存在mask参数,则返回src1 | src2 | mask
- src1:输入原图1
- src2:输入原图2,src1与src2可以相同也可以不相同,可以是灰度图像也可以是彩色图像
- dst:若存在参数时:src1 | src2 或者 src1 | src2 | mask
- mask:可以是单通道8bit灰度图像,也可以是矩阵,一般为二值化后的图像
cv2.bitwise_not
函数原型:bitwise_not(src, dst=None, mask=None)
- 函数返回值:调用时若无mask参数则返回按位取反回:~src1,若存在mask参数,则先做src1先做按位取反,然后按mask中bit=1的位取反
- src1:输入原图1
- dst:若存在参数时:与返回值相同
- mask:可以是单通道8bit灰度图像,也可以是矩阵,一般为二值化后的图像
cv2.inRange
函数原型:inRange(src, lowerb, upperb, dst=None)
- 函数返回值:二值图像
- src:输入原图,可以为单通道灰度图像,也可以为3通道彩色图像
- lowerb:像素值区间下限
- upperb:像素值区间上限
- dst:若存在参数,则与返回值相同
- 说明:单通道灰度图像,像素值低于lowerb和高于upperb的部分变成0,lower_red~upper_red之间的值变成255;三通道彩色图像,则每个通道分别与lowerb、upperb比较,然后按照相同办法修改像素值
cv2.resize
函数原型:cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
- 函数返回值:变换大小后的图像
- src:待变换输入原图,可以为单通道灰度图像,也可以为3通道彩色图像
- dsize:变换后的图像尺寸,格式:宽高通道;当dsize为0时,它可以通过以下公式计算得出:dsize = Size(round(fxsrc.cols), round(fysrc.rows))
fx - 水平轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.width/src.cols)
fy - 垂直轴上的比例因子。当它为0时,计算公式如下:(double)(dsize.heifht/src.rows) - interpolation - 插值方法
- interpolation取值:INTER_NEAREST - 最近邻插值法
- interpolation取值:INTER_LINEAR - 双线性插值法(默认)
- interpolation取值:INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
- interpolation取值:INTER_CUBIC - 基于4x4像素邻域的3次插值法
- interpolation取值:INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值
- 注意:参数dsize和参数(fx, fy)不能够同时为0
cv2.adaptiveThreshold
函数原型:cv2.adaptiveThreshold(src, maxval, thresh_type, type, blocksize, C),自适应阈值二值化
- 函数返回:二值化后的图像
- src:输入图像,只能是单通道灰度图像
- maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值,与函数cv2.threshold相同
- thresh_type: 阈值的计算方法,包含以下2种类型:cv2.ADAPTIVE_THRESH_MEAN_C; cv2.ADAPTIVE_THRESH_GAUSSIAN_C
- type:二值化操作的类型,与固定阈值函数相同,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
- blocksize: 图片中分块的大小
- C:阈值计算方法中的常数项
cv2.warpAffine仿射
函数原型:cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue)
- 函数返回:仿射变换后的图像
- src:输入图像,可以为单通道或彩色图像
- M:2*3仿射变换矩阵,矩阵格式[[1, 0, tx], [0, 1, ty]],也可由其它函数获取
- dsize:输出图像的大小
- dst:仿射变换后的输出图像
- flags:插值方法,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)
- borderMode:边界模式,可参照OpenCV第二篇的中的各种border模式
- borderValue:边界像素大小
- 一般在使用前三个参数
cv2.getRotationMatrix2D
函数原型:cv2.getRotationMatrix2D(center, angle, scale)
- 返回值:返回一个2*3矩阵,主要用于cv2.warpAffine仿射变换
- center:旋转中心坐标,是一个元组参数(col, row)
- angle:旋转角度,旋转方向,逆时针
- scale:方向比例
- 此函数主要用于获得一个旋转矩阵
cv2.warpPerspective投射
函数原型:cv2.warpPerspective(src, M, dsize, dst, flags, borderMode, borderValue)
- 函数返回:投射变换后的图像
- src:输入图像,可以为单通道或彩色图像
- M:3*3投射变换矩阵,可由函数cv2.getPerspectiveTransform获取
- dsize:输出图像的大小
- dst:仿射变换后的输出图像
- flags:插值方法,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)
- borderMode:边界模式,可参照OpenCV第二篇的中的各种border模式
- borderValue:边界像素大小
- 一般在使用前三个参数
cv2.getAffineTransform
函数原型:cv2.getAffineTransform(src, dst)
- 返回值:仿射变换2*3 矩阵
- src:仿射变换原图三角形的三个顶点坐标
- dst:仿射变换输出图像三角形的三个顶点坐标
cv2.getPerspectiveTransform
函数原型:cv2.getPerspectiveTransform(src, dst)
- 返回值:仿射变换3*3 矩阵
- src:投射变换原图矩形的4个顶点坐标
- dst:投射变换输出图像矩形的4个顶点坐标
好了,就先记录这几个,由于本篇主要用于总结函数的用途,以及参数的含义,并不涉及具体的数学知识,所以数学上的解释需要参考其他博客。以后若发现一些我不太记得住的函数,再继续添加。