图像阈值化
图像的二值化或阈值化(Binarization)旨在提取图像中的目标物体,将背景以及噪声区分开来。通常会设定一个阈值T,通过T将图像的像素划分为两类:大于T的像素群和小于T的像素群。
灰度转换处理后的图像中,每个像素都只有一个灰度值,其大小表示明暗程度。二值化处理可以将图像中的像素划分为两类颜色
图像阈值化处理操作,包括二进制阈值化、反二进制阈值化、截断阈值化、反阈值化为0、阈值化为0
retval, dst = cv2.threshold(src, thresh, maxval, type)
- src:表示的是图片源
- thresh:表示的是阈值(起始值)
- maxval:表示的是最大值
- type:表示的是这里划分时使用的算法,常用值为0(cv2.THRESH_BINARY)
- 二进制阈值化(cv2.THRESH_BINARY):大于等于阈值的像素点的灰度值设定为最大值,灰度值小于阈值的像素点的灰度值设定为0
- 反二进制阈值化(cv2.THRESH_BINARY_INV):大于阈值的像素点的灰度值设定为0,小于该阈值的灰度值设定为255
- 截断阈值化(cv2.THRESH_TRUNC):大于等于阈值的像素点的灰度值设定为该阈值,小于该阈值的灰度值不改变
- 反阈值化为0(cv2.THRESH_TOZERO_INV):大于等于阈值的像素点变为0,小于该阈值的像素点值保持不变
- 阈值化为0(cv2.THRESH_TOZERO):大于等于阈值的像素点,值保持不变,小于该阈值的像素点值设置为0
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(15, 10))
#读取图像
img = cv2.imread('data/test1.jpg')
lenna_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
GrayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#阈值化处理
#二进制阈值化
ret, thresh1 = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY)
#反二进制阈值化
ret, thresh2 = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY_INV)
#截断阈值化
ret, thresh3 = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TRUNC)
#阈值化为0
ret, thresh4 = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO)
#反阈值化为0
ret, thresh5 = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_TOZERO_INV)
#显示结果
titles = [
'Gray Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV'
]
images = [GrayImage, 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()
image.png
网友评论