图像二值化( Image Binarization)
就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。
二值化的原理
import cv2
img = cv2.imread('img/lena.jpg')
new_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
height, width = new_img.shape[0:2]
thresh = 60
for row in range(height):
for col in range(width):
gray = new_img[row, col]
if gray > thresh:
new_img[row, col] = 255
elif gray < thresh:
new_img[row, col] = 0
cv2.imshow('img', new_img)
cv2.waitKey()
OpenCV提供的图像二值化API
threshold()方法参数:
- 图片矩阵
- 阈值
- 图片中的最大值
- 二值化的方式
二值化的方式:
THRESH_BINARY高于阈值改为255,低于阈值改为0THRESH_BINARY_INV高于阈值改为0,低于阈值改为255THRESH_TRUNC截断,高于阈值改为阈值,最大值失效THRESH_TOZERO高于阈值不改变,低于阈值改为0THRESH_TOZERO_INV高于阈值该为0,低于阈值不改变
import cv2
img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)
thresh, new_img = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY)
print(thresh)
cv2.imshow('img', img)
cv2.imshow('NEW_IMG', new_img)
cv2.waitKey()
自适应阈值
使用一个全局值作为阈值。但是在所有情况下这可能都不太好。如果图像在不同区域具有不同的照明条件。在这种情况下,自适应阈值阈值可以帮助。这里,算法基于其周围的小区域确定像素的阈值。因此,我们为同一图像的不同区域获得不同的阈值,这为具有不同照明的图像提供了更好的结果。
adaptlive()方法参数:
- 图片矩阵
- 图片灰度最大值
- 计算阈值的方法
- 阈值类型
- 处理块大小
-
算法所用的常量C
-
cv2.ADAPTIVE_THRESH_MEAN_C:该阈值是该附近区域减去恒定的平均Ç。
- cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值减去常数C的高斯加权和。
import cv2
img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)
thresh_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)
cv2.imshow('thresh_img', thresh_img)
cv2.waitKey()
大津算法(最大类间方差法)
图像分割中阈值选取的最佳算法
threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
import cv2
img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)
ret, thresh_img = cv2.threshold(img, 255, 255, cv2.THRESH_BINARY)
cv2.imshow('normal', thresh_img)
gaussian_img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imshow('gaussian_img', gaussian_img)
ret, thresh_img = cv2.threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow('otsu', thresh_img)
cv2.imshow('img', img)
cv2.waitKey()
原图:
使用255的阈值进行二值化 图片全黑了:
使用高斯滤波模糊图像:
- 图片矩阵
- 卷积核
- 越大越模糊
使用0阈值的大津算法二值化经过高斯滤波模糊后的图像:
Original: https://blog.csdn.net/bjsyc123456/article/details/124781982
Author: B.Bz
Title: OpenCV图像处理—-图像的二值化
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/518145/
转载文章受原作者版权保护。转载请注明原作者出处!