opencv图像阈值操作
使用threshold方法和adaptivethreshold方法对图像进行阈值分割操作。
1、使用threshold方法,设置一个阈值,将大于阈值的值变换为最大值,小于阈值的值变换为0。
#-*- coding:utf-8 -*- # opencv 中阈值操作 import cv2 import numpy #读取一张图片 img = cv2.imread('bookback.jpg',cv2.IMREAD_COLOR) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #使用threshold方法进行阈值分割,大于阈值的设置为255,小于阈值的为0 ret,threshold = cv2.threshold(img,10,255,cv2.THRESH_BINARY) #对灰度图像进行阈值处理 ret1,threshold1 = cv2.threshold(gray,10,255,cv2.THRESH_BINARY) #显示图像 cv2.imshow('original',img) cv2.imshow('threshold',threshold) cv2.imshow('gray_threshold',threshold1) cv2.waitKey(0) cv2.destroyAllWindows()
效果:由上到下依次是:原图、彩色图像阈值分割、灰度图像阈值分割
2、使用adaptivethreshold方法进行阈值分割,该方法使用高斯函数,统计一个小块内的图像信息进行自适应阈值操作。
# -*- coding:utf-8 -*- # opencv中自适应阈值操作 import cv2 import numpy #读取一张图片 img = cv2.imread('bookback.jpg',cv2.IMREAD_COLOR) #转换为灰度图像 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #使用自适应阈值处理,源图片,最大值,阈值类型,二值化类型,分块大小,阈值计算中常数 adaptive_thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,115,1) #显示图片 cv2.imshow('original',img) cv2.imshow('adaptive_thresh',adaptive_thresh) cv2.waitKey(0) cv2.destroyAllWindows()
效果:由上到下依次是:原图、阈值分割后图像
3、使用otsu方法进行分割,该方法基于直方图统计,通过一个阈值将直方图分为两个部分。
#基于直方图的二值化 ret,thresh = cv2.threshold(gray,40,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
效果如下: