1、阈值二值化(threshold binary)
2、阈值反二值化(threshold binary Inverted)
3、截断(truncate)将超过阈值部分设置为阈值
4、阈值取零(threshold to zero)将小于阈值的部分取零
5、阈值反取零(threshold to zero Inverted)将超过阈值的部分取零
#include <opencv2/opencv.hpp>
#include <iostream>
# include <math.h>
using namespace cv;
Mat src, gray_src, dst;
int threshold_value = 127;//设置默认值
int threshold_max = 255;//设置最大值
// 0-4分别表示 CV_THRESHOLD_BINARY CV_THRESH_BINARY_INV CV_THRESH_TRUNC CV_THRESH_TOZERO CV_THRESH_TOZERO_INV
int type_value = 2;//设置默认值
int type_max = 4;//设置最大值
const char* output_title = "binary_image";
void Threshold_Demo(int, void*);
int main() {
src = imread("../../../lena.jpg");
if (!src.data) {
printf("could not load image\n");
return -1;
}
namedWindow("input_image", CV_WINDOW_AUTOSIZE);
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
imshow("input_image", src);
cvtColor(src, gray_src, CV_BGR2GRAY);
createTrackbar("Threasholde_value:", output_title, &threshold_value, threshold_max,Threshold_Demo);
createTrackbar("Type_value:", output_title, &type_value, type_max, Threshold_Demo);
waitKey(0);
return 0;
}
void Threshold_Demo(int, void*) {
cvtColor(src, gray_src, CV_BGR2GRAY);
//threshold(gray_src, dst, threshold_value, threshold_max, CV_THRESH_BINARY);
//threshold(gray_src, dst, threshold_value, threshold_max,type_value);
//其中 THRESH_OTSU和THRESH_TRIANGLE 这些方法只适合单通道八位图像,彩色图像会报错
//threshold(gray_src, dst, 0, 255,THRESH_OTSU|type_value);//自动算阈值
threshold(gray_src, dst, 0, 255,THRESH_TRIANGLE|type_value);//triangle全局自适应阈值
imshow(output_title, dst);
}