十三、基本阈值操作
1、图像阈值(threshold)
阈值简单说是把图像分割的标尺,根据这个阈值将图像进行分类处理。
2、阈值类型
- 阈值二值化(threshold binary)
THRESH_BINARY
规定某个阈值,当像素值大于这个阈值的时候为255;当像素值小于这个阈值的时候为0。 - 阈值反二值化(threshold binary Inverted)
THRESH_BINARY_INY
规定某个阈值,当像素值小于这个阈值的时候为255;当像素值大于这个阈值的时候为0。 - 截断(truncate)
THRESH_TRUNC
规定某个阈值,当像素值超过这个阈值的时候取这个像素值和阈值相等;当像素值小于这个值的时候不变。 - 阈值取零(threshold zero)
THRESH_TOZERO
规定某个阈值,当像素值大于这个阈值的时候,像素值保持不变;当像素值小于这个值的时候为0。 - 阈值反取零(threshold to zero inverted)
THRESH_TOZERO_INV
规定某个阈值,当像素值大于这个阈值的时候为0;当像素值小于这个值的时候,像素值保持不变。
OpenCV中提供了两种寻找阈值的方法:(帮助寻找最佳的阈值)
THRESH_OTSU
THRESH_TRIANGLE
3、相关API
threshold(gray_src, dst, threshold_value, threshold_max, THRESH_BINARY);
第一个参数:输入的灰度图像
第二个参数:输出图像
第三个参数:设定阈值
第四个参数:设定的输出图像中的最大像素值
第五个参数:阈值类型(前面已经介绍,0:二值化;1:反二值化;2:截断;3:取零;4:反取零)
示例代码:(5种阈值操作演示)
#include <opencv2/opencv.hpp>
#include <opencv.hpp>
using namespace cv;
using namespace std;
Mat src, gray_src, dst;
int threshold_value = 127;
int threshold_max = 255;
int type_value = 2;
int type_max = 4;
void Threshold_Demo(int, void*);
const char* output_title = "binary image";
int main(int argc, char** argv) {
src = imread("添加图片路径");
if (!src.data()) {
cout << "could not load image..." << endl;
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
namedWindow(output_title, WINDOW_AUTOSIZE);
imshow("input image", src);
createTrackbar("Threshold Value:", output_title, &threshold_value, threshold_max, Threshold_Demo);//创建滑动条控制阈值大小
createTrackbar("Type Value:", output_title, &type_value, type_max, Threshold_Demo);//创建滑动条控制阈值类型
Threshold_Demo(0, 0);
waitKey(0);
return 0;
}
void Threshold_Demo(int, void*) {
cvtCOLOR(src, gray_src, COLOR_BGR2GRAY);
threshold(gray_src, dst, threshold_value, threshold_max, type_value);
//threshold(gray_src, dst, 0, 255, THRESH_OTSU | type_value);//自动选择阈值
imshow(output_title, dst);
}
阈值类型 | 输出效果图 |
---|---|
二值化 | ![]() |
反二值化 | ![]() |
截断 | ![]() |
取零 | ![]() |
反取零 | ![]() |