python+opencv图像处理之五:图像阈值化处理
目录
- python+opencv图像处理之五:图像阈值化处理
- 一、阈值化
- 二、各方法选择参数图像对比
一、阈值化
阈值即为界限,或者说是临界值,是指一个效应能够产生的最低值或最高值。旨在提取图像中的目标物体,将背景以及噪声区分开来。
通常会设定一个阈值T,通过T将图像的像素划分为两类:大于T的像素群和小于T的像素群。灰度转换处理后的图像中,每个像素都只有一个灰度值,大小表示明暗程度。利用阈值化,我们就可以从一副图像中分割出我们需要的物体部分。
常见阈值化公式,即二进制阈值化:
当灰度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()
程序执行结果,各阈值处理参数显示如下: