目录
一、基础理论
1、二值图像概念
二值图像(Binary Image)是指将图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。
2、API介绍
def threshold(src: Any,
thresh: Any,
maxval: Any,
type: Any,
dst: Any = None) -> None
src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)
dst:输出图像
thresh:阈值
maxval:dst图像中最大值
type:阈值类型,可以具体类型如下:
enum ThresholdTypes { THRESH_BINARY = 0, //黑白 THRESH_BINARY_INV = 1, //黑白反转 THRESH_TRUNC = 2, //得到图像多像素值 THRESH_TOZERO = 3, //当前点值大于阈值时,不改变,否则设置为0 THRESH_TOZERO_INV = 4, //当前点值大于阈值时,设置为0,否则不改变 THRESH_MASK = 7, THRESH_OTSU = 8, //自适应阈值 THRESH_TRIANGLE = 16 };
二、图像二值化(黑白化)步骤:
彩色图像——>灰度图像——>二值图像
1、彩图化灰度图
C++:
//灰度图
void ToGray()
{
// 转为灰度图
cvtColor(img, grayImage, COLOR_BGR2GRAY);
imshow("灰度图像", grayImage);
}
python:
# 1、灰度图像
imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 类型
cv.imshow('imggray', imgray)
2、灰度图化黑白图(二值化)
C++:
//黑白图(二值化)
void ToBin()
{
// 将灰度图二值化
threshold(grayImage, binImage, 0, 255, THRESH_OTSU);
imshow("二值化图像", binImage);
}
python:
# 2、二进制图像
ret, binary = cv.threshold(imgray, 127, 255, 0)
#阈值 二值图像
cv.imshow('binary', binary)
3、翻转黑白部分
ret, binary = cv.threshold(imgray, 127, 255, cv.THRESH_OTSU|cv.THRESH_BINARY_INV)
总代码
C++:
# 灰度图与二值图
# 注:二值图必须由灰度图转化
import cv2 as cv
img = cv.imread('Resource/test.jpg')
cv.imshow('img', img)
# 1、灰度图像
imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 类型
cv.imshow('imggray', imgray)
# 2、二进制图像
ret, binary = cv.threshold(imgray, 127, 255, cv.THRESH_OTSU) #THRESH_OTSU:自适应阈值处理
# ret, binary = cv.threshold(imgray, 127, 255, cv.THRESH_OTSU|cv.THRESH_BINARY_INV)
#THRESH_OTSU:自适应阈值处理 cv.THRESH_TOZERO_INV:二值图反转(黑白反转)
#阈值 二值图像
cv.imshow('binary', binary)
cv.waitKey(0)
python:
# 灰度图与二值图
# 注:二值图必须由灰度图转化
import cv2 as cv
img = cv.imread('Resource/test.jpg')
cv.imshow('img', img)
# 1、灰度图像
imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 类型
cv.imshow('imggray', imgray)
# 2、二进制图像
ret, binary = cv.threshold(imgray, 127, 255, 0)
#阈值 二值图像
cv.imshow('binary', binary)
cv.waitKey(0)
参考资料
https://baike.baidu.com/item/%E4%BA%8C%E5%80%BC%E5%9B%BE%E5%83%8F/5166431?fr=aladdin