PYTHON openCv操作集合
1.二值化
函数为
cv2.threshold()
参数 | 意义 |
---|---|
第一个 | 原图像 |
第二个 | 进行分类的阈值 |
第三个 | 高于(低于)阈值时赋予的新值 |
第四个 | 方法选择参数,见下表 |
方法选择参数如下所示:
值 | 意义 |
---|---|
cv2.THRESH_BINARY | 黑白二值 |
cv2.THRESH_BINARY_INV | 黑白二值反转 |
cv2.THRESH_TRUNC | 得到的图像为多像素值 |
cv2.THRESH_TOZERO | |
cv2.THRESH_TOZERO_INV |
ret, thresh = cv2.threshold(img_ori, 1, 500, 0) # 二值化
2.寻找轮廓
contours,hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])
传入参数:
1.imgae: 原图,一般为二值化图像
2.mode:轮廓检索模式
cv2.RETR_EXTERNAL 表示只检测外轮廓
cv2.RETR_LIST 检测的轮廓不建立等级关系
cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE 建立一个等级树结构的轮廓。
3.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 近似算法
返回值:
contours:轮廓
hierarchy:每条轮廓对应的属性
contours, hierarchy = cv2.findContours(thresh, mode=cv2.RETR_EXTERNAL, method=cv2.CHAIN_APPROX_NONE) # 寻找轮廓点
图像的凸闭包
hull = cv2.convexHull(points, clockwise, returnpoints)
其中,各个参数的意义如下:
hull : 输出凸包结果,n * 1 2 数据结构,n为外包围圈点数
points: 输入的坐标点,通常为1 n * 2 结构,n为所有的坐标点的数目
clockwise:转动方向,TRUE为顺时针,否则为逆时针;
returnPoints:默认为TRUE,返回凸包上点的坐标,如果设置为FALSE,会返回与凸包点对应的轮廓上的点。
3.画圆或者点
函数:
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
函数参数含义如下:
img:要画的圆所在的矩形或图像
center:圆心坐标,如 (100, 100),一定是元组类型
radius:半径,如 10
color:圆边框颜色,如 (0, 0, 255) 红色,BGR
thickness:正值表示圆边框宽度. 负值表示画一个填充圆形
lineType:圆边框线型,可为 0,4,8
shift:圆心坐标和半径的小数点位数
4. 读取或保存图片
cv2.imread(filepath,flags)
filepath:要读入图片的完整路径
flags:读入图片的标志
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:读入灰度图片
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
import numpy as npimport cv2img = cv2.imread(‘1.jpg’,cv2.IMREAD_GRAYSCALE)
cv2.imwrite(filepath, img, flag)