cv2模块函数学习
import cv2 as cv (下文同一用cv)
1.cv.imread()
cv.imread(filename[, flags]) -> retval
其中,参数filename表示要读取得图像得文件名,flags表示读取模式,取值如下:
- flags = 2,表示载入的图像深度为16位或者32位,就返回对应深度的图像,否者转换为8位图像再返回。
- flags = 1,表示图像转换位彩色图像(RGB,3通道)。
- flags = 0,表示始终将图像转换成灰度图,即返回灰度图像,1通道。
- flags = -1,表示不加改变地载入原图。
img = cv.imread(“yd.igp”)
利用函数读取文件yd.jpg,该文件位于工程目录下,也可以使用绝对路径,如下:
img = cv.imread("d:yd.jpg")
imread的文件路径不支持中文路径,如果要支持中文路径,就可以用函数imdecode。
2.cv.imshow()
imshow(winname, mat) -> None
其中,参数winname表示显示的窗口名
把图片显示在窗口中,例如:
cv.imshow("Hello,python opencv",{name})
解释:Hello,python opencv是显示的窗口名,{name}可以是上面的img,代指读取图像的名称。
3.cv.waitKey()
waitKey([delay]) → retval
解释:参数delay是延时值,单位为ms,默认0,永久延时,一直等待,直到用户按键。
4.cv.destroyWindow()和cv.destroyAllWindows()
destroyWindow(winname) → None
解释:参数winname是要销毁窗口的名称
destroyAllWindows() → None
解释:waitKey结束后调用destroyAllWindows函数销毁所有窗口。
5.cv.imdecode()
cv.imdecode(buf, flags) -> retval
其中buf是存放图像数据地内存缓存,通常用字节数组或向量地形式表示:flags地含义同imread函数地flags参数。
cv.imdecode()函数从内存中读取图像,经常和numpy.fromfile()函数搭配使用。例如;
src1 = cv.imread("p1.jpg")
src2 = cv.imdecode(numpy.fromfile("山水.jpg",dtype = numpy.uint8),-1)
np.fromfile()函数是支持中文路径地,它通过读取文件在内存中构造数组数据,这样imdecode就能在内存中获得数组数据了,继而进行解码。
6.cv,addWeighted()
dst = cv.addWeighted(src1,alpha,src2,beta,0.0,0) 将src1图1和src2图2线性混合
cv.addWeighted()函数是将两幅相同大小、相同类型的图片进行融合,第二个参数alpha表示第一幅图片所占的权重,第四个参数beta表示第二幅图片所占的权重。权重越大,图片显示得越多。
7.cv.line()
cv.line(image, start_point, end_point, color, thickness)
- image: 要处理的图像。
- start_point: 图像的起始位置,(x坐标, y坐标)
- end_point: 图像的终止位置,(x坐标, y坐标)
- color:画线的线条颜色(0,0,255)红色
- thickness: 线条的粗细,单位:像素
8.cv.imwrite()
imwrite(filename, img[, params]) -> retval
一般写法为:cv.imwrite(‘test.jpg’, img)
解释:img是图像文件,test.jpg代表把这个img图像文件命名成test.jpg。
9.cv.namedWindow()
namedwindow(winname[,flags]) → None
解释:其中参数winname表示新建的窗口名称,随便取;flags表示窗口的标识(一般默认为cv.WINDOW_AUTOSIZE,表示窗口大小自动适应图片大小,并且不可手动更改;cv.WINDOW_NORMAL表示用户可以改变这个窗口大小;cv.WINDOW_OPENGL窗口创建的时候会支持OpenGL)
10.cv.resizeWindow()
cv.resizeWindow(winname, width, height) → None
解释:参数winname是要调整尺寸的窗口的标题;width是调整后的窗口宽度;height是调整后的窗口高度。
11.cv.setMouseCallback()
setMouseCallback(windowName, onMouse, param = None) → None
解释:参数windowName表示窗口的名字;onMouse是鼠标事件相应的回调函数指针;param传给回调函数的可选参数。
12.cv.circle()
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
解释参数说明:
- img:输入的图片或图像
- center:圆心位置
- radius:圆的半径
- color:圆的颜色
- thickness:圆形轮廓的粗细(如果为正)。负厚度表示要绘制实心圆。
- lineType: 圆边界的类型。
- shift:中心坐标和半径值中的小数位数。
代码实例:
# 画圆函数,参数分别代表原图、坐标、半径、颜色、线宽(若为-1,则表示填充)
cv.circle(img, (x, y), 20, 255, -1)
13.cv.createTrackbar()
创建滑动条
函数声明:
CreateTrackbar(trackbarName, windowname, value, count, onChange) → None
- trackbarName是滑动条的名称;
- windowName是滑动条将要添加到父窗口的名称...
- value是一个指向整数的指针,这个整数值会随着滑动扭的移动自动变化;
- count是滑动条可以滑动的最大值;
- onChange是一个指向回调函数的指针,当滑动扭移动时回调函数就会自动调用。
14.cv.setTrackbarPos()
设置滑动条位置
函数声明:
SetTrackbarPos(trackbarname, windowname, pos) → None
- trackbarName是滑动条的名称;
- windowName是滑动条将要添加到父窗口的名称..
- pos表示设置的滑动块的位置
15.cv.getTrackbarPos()
获取滑动条位置
函数声明:
GetTrackbarPos(trackbarname, windowname) → retval
- trackbarName是滑动条的名称;
- windowName是滑动条将要添加到父窗口的名称..
16.cv.floodFill()
OpenCV库中的floodfill函数,包括两种不同的填充方式:一种是基于颜色范围的FLOODFILL_FIXED_RANGE,另一种是基于闭合空间的FLOODFILL_MASK_ONLY。
floorFill(image, mask , seedPoint, newVal, loDiff, upDiff, flags)
- image:处理对象,为待使用泛洪算法的图像;
- mask:为掩码层,使用掩码可以规定是在哪个区域使用该算法,如果是对于完整图像都要使用,则掩码层大小为原图行数+2,列数+2.是一个二维的0矩阵,边缘一圈会在使用算法是置为1。而只有对于掩码层上对应为0的位置才能泛洪,所以掩码层初始化为0矩阵。
- seedPoint:填充的起点
- newVal:填充的颜色
- loDiff:填充时下限像素的差,是相对于seed种子点像素可以往下的像素值;
- upDiff:填充时上限像素的差,是相对于seed种子点像素可以往上的像素值;
- flags:填充的方式 :FLOODFILL_FIXED_RANGE 和FLOODFILL_MASK_ONLY
import numpy as np
import cv2 as cv
def fill_binary():
image = np.zeros([400, 400, 3], np.uint8)
image[100:300, 100:300, : ] = 255
cv.imshow("fill_binary", image)
mask = np.ones([402, 402, 1], np.uint8)
mask[101:301, 101:301] = 0
cv.floodFill(image, mask, (200, 200), (0, 0, 255), cv.FLOODFILL_MASK_ONLY)
cv.imshow("filled binary", image)
fill_binary()
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
参考:https://blog.csdn.net/weixin_45718167/article/details/104682985
17.cv.rectangle()
全局函数rectangle用来通过对角线上的两个顶点绘制矩形。函数声明如下:
cv.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]] ) -> img
cv.rectangle(img, rec, color[, thickness[, lineType[, shift]]] ) -> img
- img:表示矩形所在的图像;
- pt1:表示矩形的一个顶点:
- pt2:表示矩形对角线上的另一个顶点;
- color:表示线条颜色(BGR)或亮度(灰度图像,grayscale image);
- thickness:表示组成矩形的线条的粗细程度;
- line_type:表示线条的类型;
- shift:表示坐标点的小数点位数。
例如:
import cv2 as cv
img = cv.imread("test.jpg")
img1=cv.rectangle(img,(10,10),(30,40),(255,0,0),2)
cv.imwrite("res.jpg",img1)
cv.imshow("res", img1)
cv.waitKey(0)
运行结果:
18.cv.ellipse()
函数ellipse用来绘制或者填充一个简单的椭圆弧或椭圆扇形。函数声明如下:
Ellipse(img, center, axes, angle, start_angle, end_angle, color, thickness=1, lineType=8, shift=0) → None
- img:表示输入的图像;
- center:表示圆心坐标;
- axes :表示轴的长度;
- angle:表示偏转的角度;
- start_angle:表示圆弧起始角的角度;
- end_angle:表示圆弧终结角的角度;
- color:表示圆的颜色,是BGR形式;
- thickness:线条的粗细程度,thickness = -1表示被填充;
- lineType:线条的类型;
- shift:圆心坐标点和数轴的精度。
19.cv.cvtColor()
cvtColor函数声明:
cvtColor(src, code[, dst[, dstCn]]) -> dst
- src:表示输入的图像,即要进行颜色空间变换的原图像,可以是数组矩阵;
- code:表示颜色空间转换代码,即在此确定将什么制式的图片转换成什么制式的图片;
- dst:表示输出与src相同大小和深度的图像,即进行颜色空间变换后存储图像;
- dstCn:表示目标图像通道数,默认取值为0,如果参数为0,则从src和代码自动获得通道的数量。
20.cv.circle()
全局函数circle用来绘制或填充一个给定圆心和半径的圆。函数声明如下:
cv.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) -> img
- img:表示输入的图像;
- center:表示圆心坐标;
- radius:表示圆的半径;
- color:表示圆的颜色,是BGR形式;
- thickness:线条的粗细程度,thickness = -1表示被填充;
- lineType:线条的类型;
- shift:圆心坐标点和半径值的小数点位数。
21.cv.line()
在OpenCV中,函数line用来实现画线段,函数声明如下:
line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → None
- img:表示输入的图像;
- pt1:表示线段的起始点;
- pt2:表示线段的结束点;
- color:表示线条颜色(BGR)或亮度(灰度图像,grayscale image);
- thickness:表示组成矩形的线条的粗细程度;
- line_type:表示线条的类型;
- shift:表示点坐标中的小数点位数。
22.cv.polylines()
在OpenCV中,函数polylines用来画多边形,函数声明如下:
polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) → None
- img:表示输入的图像;
- pts:表示多边形点集;
- isClosed:表示绘制的多段线是否闭合,如果是闭合的,那么函数将从每条曲线的最后一个顶点到其第一个顶点绘制一条直线;
- color:表示多边形的颜色;
- thickness:表示多段线边的厚度;
- line_type:表示线条的类型;
- shift:表示点坐标中的小数位数。
23.cv.fillPoly()
在OpenCV中,除了绘制多边形之外,还可以填充多边形。函数fillPoly用来填充多边形,函数声明如下:
fillPoly(img, pts, color[, lineType[, shift[, offset]]]) → None
- img:表示输入的图像;
- pts:表示多边形点集;
- color:表示多边形的颜色;
- lineType:表示线条的类型;
- shift:表示点坐标中的小数位数。
- offset:表示等高线所有点的偏移。
24.cv.putText()
OpenCV中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数,即在图像上绘制文字。这个函数是putText(),它是命名空间cv2中的函数,函数声明如下:
putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) → None
- img:表示待绘制的图像;
- text:表示待绘制的文字;
- org:表示文本框的左下角;
- fontFace:表示字体;
- fontScale:表示尺寸因子,值越大文字越大;
- color:字体的颜色(RGB);
- thickness:表示线条的宽度;
- lineType:表示线型(4邻域或8邻域,默认8邻域);
- bottmoLeftOrigin:如果为True,那么图像数据原点位于左下角,否则位于左上角。
25.cv.getTextSize()
getTextSize函数获取一个文字的宽度和高度,函数声明如下:
getTextSize(text, fontFace, fontScale, thickness) → retval, baseLine
- text:表示输入的文本文字;
- fontFace:表示文字字体类型;
- fontScale:表示字体缩放系数;
- thickness:表示字体笔画线宽;
- baseLine:是一个返回值,表示文字最底部的y坐标。
26.cv.copyMakeBorder()
在OpenCV中,可以使用函数copyMakeBorder为图像设置边界。该函数可以为图像定义额外的填充(边框),原始边缘的行或列被复制到额外的边框中。该函数声明如下:
cv.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]]) -> dst
- src:输入的图像,即原图像;
- top、bottom、left、right:分别表示在原图像的4个方向上填充多少像素;
- borderType:表示边界类型。
- value:默认值为0,当borderType取纸为BORDER_CONSTANT时,这个参数表示边界值;
- dst:表示输出图像,和原图像有一样的深度,大小为Size(src.cols + left + right,src.rows + top + bottom)。
27.cv.findContours()
OpenCV中使用findContours函数,通过简单的几个步骤就可以检测出物体的轮廓,很方便。该函数声明如下:
cv.findContours( image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy
- image:表示单通道图像矩阵,可以时灰度图,更常用二值图像;
- mode:表示轮廓检索模式;
- method:表示轮廓近似法;
- contours:是一个向量,并且是双重向量,向量内每个元素保存了一组由连续的Point构成的点的集合向量,每一组Point点集就是一个轮廓,有多少轮廓,向量contours就有多少元素;
- hierarchy:定义为“vector<Vec4i>hierarchy”。
28.cv.drawContours()
绘制轮廓函数drawContours经常和查找轮廓函数findContours联合使用,查找出轮廓后通常需要把轮廓绘制出来。函数drawContours声明如下:
cv.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]) -> image
- image:表示目标图像;
- contours:表示输入的轮廓组,每一组轮廓由点vector构成;
- contourIdx:指明画第几个轮廓,如果该参数为负值,则画全部轮廓;
- color:轮廓的颜色;
- hierarchy:为轮廓的结构信息;
- maxLevel:表示绘制轮廓的最高级别,只有在hierarchy有效的时候才有效,值为0时,绘制与输入轮廓属于同一等级的所有轮廓(输入轮廓和与其相邻的轮廓),值为1时,绘制与输入轮廓同一等级的所有轮廓与其子节点,值为2时,绘制与输入轮廓同一等级的所有轮廓与其子节点以及子节点的子节点;
- offset:表示可选的轮廓偏移参数。
29.cv.equalizeHist()
使用直方图均衡化来改善图像质量,通过OpenCV函数equalizeHist(这种方式不懂原理也可以使用,只要把原图像输入即可得到均衡化的图像输出)。equalizeHist函数对图像进行直方图均衡化,声明如下:
equalizeHist (src[, dst] ) → dst
- src:表示输入图像,即源图像,但需要为8位单通道的图像;
- dst:表示输出结果,需要和源图像有一样的尺寸和类型。
30.cv.blur()
OpenCV提供了blur函数实现均值滤波操作,函数声明如下:
cv.blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst
- src:表示输入图像,图像深度是CV_8U、CV_16U、CV_16S、CV_32F以及CV_64F其中的一个;
- ksize:表示滤波模板kernel的尺寸,一般使用Size(w, h)来指定,如Size(3, 3);
- dst:表示输出图像,深度和类型与输入图像一致;
- anchor:表示锚点,也就是处理的像素位于kernel的什么位置,默认值为(-1, -1),即位于kernel中心;
- border:用于推断图像外部像素的某种边界模式,默认值是BORDER_DEFAULT。
31.cv.GaussianBlur()
在OpenCV中,函数GaussianBlur可以实现高斯滤波,函数声明如下:
cv.GaussianBlur(src, ksize, sigmaX [, dst [, sigmaY [ , borderType ]]] ) → dst
- src:表示输入图像;
- dst:表示输出图像;
- ksize:表示内核大小;
- sigmaX:表示高斯核函数在X方向的标准偏差;
- sigmaY:表示高斯核函数在Y方向的标准偏差;
- borderType:表示边界模式,默认值为BORDER_DEFAULT。
32.cv.medianBlur()
在OpenCV中,可以利用medianBlur()来进行中值平滑,声明如下:
medianBlur(src, ksize[, dst]) → dst
- src:为被滤波图片,需要1、3或4通道的图像;
- dst:滤波后的输出结果;
- ksize:是mask的大小,比如,若用3*3的模板,ksize就传值3。
33.cv.bilateralFilter()
双边滤波的操作主要是通过cv.bilateralFilter函数来操作的,有美颜的效果,函数声明如下:
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) → dst
- src:表示输入图像;
- d:表示过滤时周围每个像素领域的直径;
- sigmaColor:表示在color space中过滤sigma,参数越大,临近像素将会在越远的地方混合;
- sigmaSpace:表示在coordinate space中过滤sigma,参数越大,哪些足够相近的颜色影响越大。
34.cv.warpAffine()
OpenCV提供了函数warpAffine,该函数使用指定的矩阵变换源图像,声明如下:
warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
- src:表示输入的图像;
- M:表示2*3变换矩阵;
- dsize:表示输出图像的大小;
- dst:表示大小为dsize且类型与src相同的输出图像;
- flags:表示插值方法的组合;
- borderMode:表示边界模式;
- borderValue:表示在边界为常量的情况下使用的值,默认为0。
35.cv.getRotationMatrix2D()
OpenCV提供的库函数getRotationMatrix2D来实现图像旋转。还函数用来计算出旋转矩阵,声明如下:
getRotationMatrix2D(center, angle, scale) → retval
- center:表示旋转的中心点;
- angle:表示旋转的角度;
- scale:表示图像缩放因子。
36.cv.warp Affine()
在OpenCV中,进行仿射变换的函数是warp Affine,声明如下:
warp Affine(src,M,dsize[,dest[,flags[,boederModel[,borderValue]]]])→dest
src:表示输入图像;
dest:表示输出图像,尺寸由dsize指定,图像类型与原图像一致;
M:表示2×3的变换矩阵;
dsize:指定图像输出尺寸;
flags:表示插值算法标识符,如果为WARP-INVERSE-MVP,则默认值INTER_LINEAR;borderMode表示边缘像素模式,有默认值BORDER-CONSTANT;
border Value:表示边界取值,有默认值Scalar(),即0
37.cv.resize()
在OpenCV中,实现图像缩放的函数是resize,函数声明如下:
resize(src,dsize[,dst[fx[,interpolation]]]]→dst
参数s表示原图像;
dst表示输出图像;
dsize表示目标图像大小;
fx表示在x轴上放缩比例;
fy表示在y轴上的放缩比例;
interpolation表示插值方式,
注意:dsize,fx和fy不能同时为零。
38.cv.filter2D()
实现Roberts算子主要通过OpenCV中的filter2D函数来完成。这个函数的主要功能是通过卷积核实现对图像的卷积运算,声明如下:
def filter2D(src, ddepth, kernel, dst = None, anchor = None, delta = None, borderType = None)
- src:输入图像;
- ddepth:表示目标图像所需的深度;
- kernel:表示卷积核。
39.cv.Sobel()
OpenCV提供了对图像提取Sobel边缘的Sobel函数,该函数声明如下:
Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst
- src:表示待提取边缘的图像;
- dst:表示输出图像,与输入图像src具有相同的尺寸和通道数,数据类型由第三个参数ddepth表示输出图像的数量类型;
- dx:表示x方向的差分阶数;
- dy:表示y方向的差分阶数;
- ksize:表示Sobel边缘算子的尺寸,必须是1、3、5、或者7;
- scale:表示对导数计算结果进行缩放的缩放因子,默认系数为1,不进行缩放;
- dekta:表示偏值,在计算结果中加上偏值;
- borderType:表示像素外推法选择标志,默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。
ps:正在努力学习中,为待完成...