opencv图像基本处理函数介绍

1 cv2.imread():读取图片

img=cv2.imread('a.jpg')

2 cv2.imshow():显示图片

cv2.imshow('img',img)  

3 cv2.cvtColor():色彩空间转换

图像处理中有多种色彩空间,例如 RGB、HLS、HSV、HSB、YCrCb、CIE XYZ、CIE Lab 等,经常要遇到色彩空间的转化,以便生成 mask 图等操作。

参数介绍

def cvtColor(src, code, dst=None, dstCn=None):
"""
转换图像的颜色空间
Argument:
    src: 原图像;
    code: 指定颜色空间转换类型;
    dst: 目标图像;与原图像大小深度一致;
    dstCn: 指定目标图像通道数;默认None,则会根据src、code自动计算;
"""

使用方法

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #将BGR图像转换为HSV图像

还有其他多种转换格式,可参考详细描述

4 cv2.inRange():设阈值,取出背景,常用于提取特定颜色

参数介绍:

函数带有三个参数,分别是:
参数1:hsv指的是原图
参数2:lower_red指的是图像中低于这个lower_red的值,图像值变为0
参数3:upper_red指的是图像中高于这个upper_red的值,图像值变为0
在lower_red~upper_red之间的值变成255,显示

使用示例:

blue_lower=np.array([100,50,50])
blue_upper=np.array([124,255,255])
mask=cv2.inRange(hsv,blue_lower,blue_upper)

5 cv2.blur():均值滤波函数

1.cv2.blur(img, (3, 3))  进行均值滤波
#参数说明:img表示输入的图片, (3, 3) 表示进行均值滤波的方框大小

6 cv2.threshold():图像阈值处理,常用于二值化

参数介绍

cv2.threshold(src, thresh, maxval, type[, dst]) 
#src:表示的是图片源
#thresh:表示的是阈值(起始值)
#maxval:表示的是最大值
#type:表示的是这里划分的时候使用的是什么类型的算法,常用值为0(cv2.THRESH_BINARY)

使用示例

ret,binary=cv2.threshold(blurred,127,255,cv2.THRESH_BINARY)
#返回值分别是阈值和二值化后的图像

7 cv2.getStructuringElement():生成不同的结构元素,用于决定图片形态学操作性质

numpy常用于构建正方形元素,cv2.getStructuringElement()可用于构成矩形、正方形、椭圆、圆形、十字形结构。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))  # 矩形结构
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))  # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))  # 十字形结构

8 cv2.morphologyEx()函数:进行各类形态学的变化

参数说明

cv2.morphologyEx(src, op, kernel) 
#参数说明:
#src传入的图片
#op进行变化的方式
#op =  cv2.MORPH_OPEN 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作
#op = cv2.MORPH_CLOSE 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作
#kernel表示方框的大小

使用示例

closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)

9 cv2.erode():图像腐蚀操作,减肥

**原理:**卷积核沿着图像滑动,如果与卷积核对应的原图像像素值都是1,那么中心元素保持原值,否则为0。
**效果:**把前景物体的边缘腐蚀掉,靠近前景的像素被腐蚀为0,前景物体变小,图像白色区域减少,对于去除白噪声很有用,可以断开两个连接在一起的物体。

img_erode = cv2.erode(img,None,iterations=5)
#iteration的值越高,腐蚀程度越高 呈正相关关系,图片越模糊

10 cv2.dilate():图像膨胀操作,增胖

**原理:**与腐蚀相反,卷积核当中只要有一个值是1,中心元素值就是1。
**效果:**增加前景中的白色区域,一般在去噪声的时候都是先腐蚀再膨胀,腐蚀的过程会使得前景变小,使用膨胀操作使前景变换回来。膨胀也可以使相互分离的物体连接。

dilate=cv2.dilate(image,None,iterations=4) # iterations表示迭代的次数

11 cv2.findContours():查找检测物体的轮廓

参数介绍

contours, hierarchy=cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])  
'''
第一个参数是寻找轮廓的图像;
第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
cv2.RETR_EXTERNAL表示只检测外轮廓
cv2.RETR_LIST检测的轮廓不建立等级关系
cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE建立一个等级树结构的轮廓。
第三个参数method为轮廓的近似办法
cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法
'''
#返回值:cv2.findContours()函数返回两个值,一个是轮廓本身,另外一个是每条轮廓对应的属性。

使用示例

contours, hierarchy=cv2.findContours(img, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

其他详细说明可参考:cv2.findContours()用法

12 cv2.minAreaRect() 与 cv2.boxPoints ():

cv2.minAreaRect(Points),其中points是点集,数据类型为ndarray,array((x1,y1),(x2,y2),…,(xn,yn))
cv2.minAreaRect(points)表示求出在上述点集下的最小面积矩形
cv2.minAreaRect函数返回rect对象,rect[0]返回矩形的中心点(x,y),实际上为y行x列的像素点
cv2.boxPoints(rect)可以返回四个点的值,其中cv2.boxPoints(rect)[0]为point[0],cv2.boxPoints(rect)[1]为point[1]…

rect=cv2.minAreaRect(con)
cv2.boxPoints(rect)

其他详细信息可参考: cv2.minAreaRect() 函数介绍

13 cv2.drawContours():绘制目标区域(轮廓)

参数说明:

cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)

#第一个参数是指明在哪幅图像上绘制轮廓;image为三通道才能显示轮廓
#第二个参数是轮廓本身,在Python中是一个list;
#第三个参数指定绘制轮廓list中的具体哪条轮廓,如果是-1,则绘制所有轮廓。

使用示例


img=cv2.drawContours(img,contours,-1,(0,255,0),2)  # img为三通道才能显示轮廓

你可能感兴趣的:(opencv)