图像全局二值化
threshold(src, thresh, maxval, type[, dst])
- src 最好是灰度图
- thresh: 阈值
- maxval: 最大值, 最大值不一定是255
- 返回两个结果, 一个是阈值, 另一个是处理后的图片
-
- ret, dst = cv2.threshold(gray, 80, 255, cv2.THRESH_BINARY)
- 小于阈值直接变为0,大于变为maxval,这样有两个值
自适应阈值二值化
adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
Adaptive Method- 指定计算阈值的方法。
– cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值
– cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。
• Block Size - 邻域大小(用来计算阈值的区域大小)。
• C - 这就是是一个常数,阈值就等于的平均值或者加权平均值减去这个常数。
dst = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 3, 0)
获取形态学卷积核
getStructuringElement(shape, ksize[, anchor])
- shape是指卷积核的形状, 注意不是指长宽, 是指卷积核中1形成的形状.
- MORPH_RECT 卷积核中的1是矩形, 常用.
- MORPH_ELLIPSE 椭圆
- MORPH_CROSS 十字
接下来的操作都需要计算形态学卷积核
腐蚀操作
erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])
处理细小的噪音,有粗变细.
- iterations是腐蚀操作的迭代次数, 次数越多, 腐蚀操作执行的次数越多, 腐蚀效果越明显
dst = cv2.erode(img, kernel, iterations=2)
膨胀操作
dilate(img, kernel, iterations=1) 第二个参数是卷积核
dst = cv2.dilate(img, kernel, iterations=2) 由细变粗
开运算
- 开运算 = 腐蚀 + 膨胀
- morphologyEx(img, MORPH_OPEN, kernel)
- MORPH_OPEN 表示形态学的开运算
- kernel 如果噪点比较多, 会选择大一点的kernel, 如果噪点比较小, 可以选择小点的kernel
清除图像外部的噪音
dst = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=2)
闭运算
- 闭运算 = 膨胀 + 腐蚀
清除图像外部的噪音
dst = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel, iterations=2)
形态学梯度
- 梯度 = 原图 - 腐蚀
- 腐蚀之后原图边缘变小了, 原图 - 腐蚀 就可以得到腐蚀掉的部分, 即边缘.
dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel, iterations=1)
顶帽运算
- 顶帽 = 原图 - 开运算
- 开运算的效果是去除图像外的噪点, 原图 - 开运算就得到了去掉的噪点.
dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel, iterations=1)
黑帽操作
- 黑帽 = 原图 - 闭运算
- 闭运算可以将图形内部的噪点去掉, 那么原图 - 闭运算的结果就是图形内部的噪点.
dst = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel, iterations=1)