OpenCV常用图片处理
图片读取、保存、大小设置
cv2.imread()
cv2.imread(filepath, flag)
第一个参数是要读取的图片路径
第二个参数决定读取图片的通道
flag = -1, 8位深度,原通道
flag = 0, 8位深度,1通道
flag = 1, 8位深度,3通道
flag = 2, 原深度, 1通道
flag = 3, 原深度, 3通道
flag = 4, 8位深度,3通道
得到图片蒙版、勾画轮廓、填充轮廓
cv2.threshold()
图像阈值处理
cv2.threshold(src, thresh, maxval, type)
src
- src:要处理的图片路径
- thresh:阈值
- maxval:最大值
- type:处理类型,这里指在划分时使用什么样的算法
常用算法类型:
THRESH_BINARY = 0,大于阈值的像素值用maxval代替,小于的像素值用0代替
THRESH_BINARY_INV = 1,INV表示取反
THRESH_TRUNC = 2,大于阈值的像素值用阈值代替,小于阈值的像素值不变
THRESH_TOZERO = 3,大于阈值的像素值不变,小于阈值的像素值用0代替
THRESH_TOZERO_INV = 4,与上述方法相反
该函数有两个返回值,第一个retVal(得到的阈值值),第二个就是阈值化后的图像。 此图像是二值图像,黑白图,但它不是单通道的灰度图。
cv2.findContours
用于轮廓检测;
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])
参数:
1、寻找轮廓的图像
2、轮廓的检索模式
cv2.RETR_EXTERNAL表示只检测外轮廓
cv2.RETR_LIST检测的轮廓不建立等级关系
cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE建立一个等级树结构的轮廓。
3、轮廓的近似算法
cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
返回:
1、轮廓,每个轮廓是一个ndarray,每个ndarray是轮廓上的点的集合。轮廓中并不是存储轮廓上所有的点,而是只存储可以用直线描述轮廓的点的个数,比如一个矩形,只需4个顶点就能描述轮廓了。
2、轮廓对应的属性。这是一个ndarray,其中的元素个数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。
cv2.fillConvexPoly
填充轮廓