python+opencv图像处理之五:图像阈值化处理


目录

  • python+opencv图像处理之五:图像阈值化处理
  • 一、阈值化
  • 二、各方法选择参数图像对比


一、阈值化

阈值即为界限,或者说是临界值,是指一个效应能够产生的最低值或最高值。旨在提取图像中的目标物体,将背景以及噪声区分开来。
通常会设定一个阈值T,通过T将图像的像素划分为两类:大于T的像素群和小于T的像素群。灰度转换处理后的图像中,每个像素都只有一个灰度值,大小表示明暗程度。利用阈值化,我们就可以从一副图像中分割出我们需要的物体部分。
常见阈值化公式,即二进制阈值化:
阈值分割 python 可调 python阈值计算_python
当灰度Gray小于阈值T时,其像素设置为0,图像中显示为黑色;当灰度Gray大于或等于阈值T时,其Y值为255,图像中显示为白色。

opencv中对于图像阈值处理提供了cv2.threshold()函数
cv2.threshold()中包含四个参数,分别为:
第一个原图像
第二个进行分类的阈值
第三个是高于(低于)阈值时赋予的新值
第四个是一个方法选择参数,常用的有:

参数

参数作用效果

cv2.THRESH_BINARY

像素点的灰度值大于阈值,设其灰度值为最大值(255);小于阈值,设其灰度值为最小值(0)

cv2.THRESH_BINARY_INV

像素点的灰度值大于阈值,设其灰度值为最小值(0);小于阈值,设其灰度值为最大值(255)

cv2.THRESH_TRUNC

像素点的灰度值小于阈值,其灰度值不变;大于阈值,设其灰度值为阈值

cv2.THRESH_TOZERO

像素点的灰度值小于阈值,其灰度值不变;大于阈值,设其灰度值为最小值(0)

cv2.THRESH_TOZERO_INV

像素点的灰度值大于阈值,其灰度值不变;小于阈值,设其灰度值为最小值(0)

该函数有两个返回值,第一个retVal(得到的阈值数据),第二个就是阈值化后的图像。

二、各方法选择参数图像对比

程序代码如下:

#encoding:utf-8
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#输入图像
image= cv2.imread("line.jpg")

#将图片转换为灰度图
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#阈值化处理
ret,thresh1=cv2.threshold(gray,127,255,cv2.THRESH_BINARY) 
ret,thresh2=cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)  
ret,thresh3=cv2.threshold(gray,127,255,cv2.THRESH_TRUNC)  
ret,thresh4=cv2.threshold(gray,127,255,cv2.THRESH_TOZERO)  
ret,thresh5=cv2.threshold(gray,127,255,cv2.THRESH_TOZERO_INV)

#显示结果
titles = ['Gray Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']  
images = [gray, thresh1, thresh2, thresh3, thresh4, thresh5]  
for i in range(6):  
   plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()

程序执行结果,各阈值处理参数显示如下:

阈值分割 python 可调 python阈值计算_阈值分割 python 可调_02