小言_互联网的博客

OpenCV——11图像二值化

587人阅读  评论(0)

图像二值化

  • 二值图像
  • 图像二值化方法
  • 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场