使用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()

 效果:由上到下依次是:原图、彩色图像阈值分割、灰度图像阈值分割

opencv图像阈值操作-LMLPHP

opencv图像阈值操作-LMLPHP

opencv图像阈值操作-LMLPHP

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()

 效果:由上到下依次是:原图、阈值分割后图像

opencv图像阈值操作-LMLPHP

opencv图像阈值操作-LMLPHP

3、使用otsu方法进行分割,该方法基于直方图统计,通过一个阈值将直方图分为两个部分。

#基于直方图的二值化
ret,thresh = cv2.threshold(gray,40,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

 效果如下:

opencv图像阈值操作-LMLPHP

05-11 19:58