#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
Mat src, dst,dst2,gray_src;
char* INPUT_WIN = "input image";
char* output_title = "binary image";
int threshold_value = 127;
int threshold_max = 255;
int type_value = 2;
int type_max = 4;
void Threshold_Demo(int, void*)
{
cvtColor(src, gray_src, CV_BGR2GRAY);
//threshold(gray_src, dst, threshold_value, threshold_max, THRESH_BINARY);
//反二值化
//threshold(gray_src, dst, threshold_value, threshold_max, THRESH_BINARY_INV);
//type_value有如下类型:
//THRESH_BINARY
//THRESH_BINARY_INV
//THRESH_THRESH_TRUNC 大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。
//THRESH_THRESH_TOZERO 像素点的灰度值大于该阈值的不进行任何改变;2 像素点的灰度值小于该阈值的,其灰度值全部变为0。
//THRESH_THRESH_TOZERO_INV
/*threshold(gray_src, dst, threshold_value, threshold_max, type_value);*/
//自动取阈值
threshold(gray_src, dst, threshold_value, threshold_max, THRESH_OTSU | type_value);
imshow(output_title, dst);
}
int main()
{
//原图
src = imread(".//pic//kate.png", IMREAD_UNCHANGED);
namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
imshow(INPUT_WIN, src);
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
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;
}