图像二值化
- 二值图像
- 图像二值化方法
- OpenCV中图像二值化方法
- 超大图像二值化
二值图像:
- 0代表黑色,1代表白色
图像二值化方法
- 全局阈值
- 局部阈值
OpenCV中图像二值化方法
- OTSU
- Triangle
- 自动与手动
说明:
- 当图像直方图中只有一个波峰的时候,cv.THRESH_TRIANGLE效果比较好,当有多个波峰时效果很差,常用于细胞图像处理领域
cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
- cv.ADAPTIVE_THRESH_MEAN_C:把图像分成一个个小的方格,计算出每个方格的均值,然后大于该均值的是白色,小于的是黑色
- cv.ADAPTIVE_THRESH_G_C:求均值时带上高斯权重,这样得到的均值更有效,也就是最中心的权重最大,这样就考虑了像素位置空间因素的影响
- blockSize必须是奇数
- 每个位置的像素值与均值之差大于C,才设白色,否则是黑色,目的是防止局部噪声的影响
# -*- coding:utf-8 -*-
import cv2 as cv
import numpy as np
# 全局阈值
def threshold_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
print("threshold value %s"%ret)
cv.imshow("binary image", binary)
# 局部阈值
def local_threshold(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)
cv.imshow("binary image", binary)
# 自定义阈值
def custom_threshold(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
h, w = gray.shape[0:2]
m = np.reshape(gray, [1, w*h])
mean = m.sum() / (w*h)
print("mean :", mean)
ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)
cv.imshow("binary image", binary)
# 读取图片
src = cv.imread("D:\Python\Projects\OpenCV_toturial\images\lena.png")
# 创建opencv的GUI窗口
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
# 将图片放入指定名字的窗口中显示出来
cv.imshow("input image", src)
# threshold_demo(src)
# local_threshold(src)
custom_threshold(src)
# 设置waitKey中的delay为0,程序会等待用户操作后关闭窗口
cv.waitKey(0)
cv.destroyAllWindows()
转载:https://blog.csdn.net/qq_36825778/article/details/102395398
查看评论