Python+OpenCV(八)——图像二值化

Python+OpenCV(八)——图像二值化

学习视频: 其他学习记录:

源码如下:

# -*- coding = utf-8 -*-
# @Time : 2021/8/2 21:20
# @Author : 西兰花
# @File : OpenCV08.py
# @Software : PyCharm


import cv2 as cv    # 引入OpenCV模块
import numpy as np


def threshold_demo(image):      # 全局阈值二值化
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
    print("threshold value %s" % ret)
    cv.imshow("binary_all", binary)


def local_threshold_demo(image):      # 局部阈值二值化
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C , cv.THRESH_BINARY, 25, 10)
    cv.imshow("binary_local", binary)


def custom_threshold_demo(image):     # 均值二值化
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    h, w = gray.shape[: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("custom", binary)


def big_image_binary(image):    # 对超大图进行二值化处理
    print(image.shape)
    cw = 256
    ch = 256
    h, w = image.shape[:2]      # 计算图像大小
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)    # 灰度处理
    for row in range(0, h, ch):     # 将超大图像分块二值化处理
        for col in range(0, w, cw):
            roi = gray[row:row + ch, col:col + cw]
            dst = cv.adaptiveThreshold(roi, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 127, 20)
            # 利用adaptiveThreshold_C消除一些的噪声
            gray[row:row + ch, col:col + cw] = dst
            print(np.std(dst), np.mean(dst))    # 计算每个分块的均值,标准差
    cv.imwrite("C:/Users/Administrator/Pictures/PS/big_image_binary.jpg", gray)


print("------ Hello OpenCV ------")
src = cv.imread("C:/Users/Administrator/Pictures/PS/5.jpg")     # 读取图像
# cv.imshow("input image_5.jpg", src)    # 显示图像
# threshold_demo(src)
# local_threshold_demo(src)
# custom_threshold_demo(src)
big_image_binary(src)
cv.waitKey(0)

cv.destroyAllWindows()  # 销毁/关闭所有窗口

输出结果: 1.全局阈值二值化、局部阈值二值化 2.均值二值化 3.超大图像二值化

经验分享 程序员 微信小程序 职场和发展