图像二值化
https://www.cnblogs.com/ssyfj/p/9272615.html 为参考
#File Name : 第十六课.py
#图像二值化
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def threshold_demo(image):
# 全局阈值
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
#ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
# 其中 0 是阈值 当 后边有预制方法的时候它不起作用
ret, binary = cv.threshold(gray, 75, 255, cv.THRESH_BINARY)
print('threshold value %s'%ret)
cv.imshow('binary',binary)
def local_threshold(image):
# 局部 二值化 就是先分小块 然后就行二值化 最后组合到一起
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
binary = cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,25,5)
cv.imshow('local',binary)
def custom_threshold(image):
# 自定义阈值
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
h,w = gray.shape[:2]
m = np.reshape(gray,[1,w*h])
mean = m.mean()
print('mean:',mean)
ret,binary = cv.threshold(gray,mean,255,cv.THRESH_BINARY)
cv.imshow('binary',binary)
src = cv.imread('G:/openCV/opencv/sources/samples/data/zhou.jpg')
cv.namedWindow('input image',cv.WINDOW_AUTOSIZE)
cv.imshow('input image',src)
#threshold_demo(src)
custom_threshold(src)
#local_threshold(src)
cv.waitKey(0)