基本阈值操作
l阈值 是什么?简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation)
阈值类型一阈值二值化(threshold binary)
l左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
阈值类型一阈值反二值化(threshold binary Inverted)
l左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
阈值类型一截断 (truncate)
l左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
阈值类型一阈值取零 (threshold to zero)
l左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
阈值类型一阈值反取零 (threshold to zero inverted)
l左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat src, dst, gray_src;
const char * out_put = "binary image";
void Threshold_demo(int, void*);
int thres_value = 127;
int thres_max = 255;
int type_value = 2;//阈值类型
int type_max = 5;
int main(int agrc, char** agrv) {
src = imread("C:/Users/liyangxian/Desktop/bjl/nm3.jpg");
if (!src.data) {
printf("no load..\n");
return -1;
}
const char* input_win = "input";
namedWindow(input_win, CV_WINDOW_AUTOSIZE);
namedWindow(out_put, CV_WINDOW_AUTOSIZE);
imshow(input_win, src);
createTrackbar("threshold value", out_put, &thres_value, thres_max, Threshold_demo);
createTrackbar("type value", out_put, &type_value, type_max, Threshold_demo);
Threshold_demo(0, 0);
waitKey(0);
return 0;
}
void Threshold_demo(int, void*) {
cvtColor(src, gray_src, CV_BGR2GRAY);
threshold(gray_src, dst, thres_value, thres_max, type_value);
//threshold(gray_src, dst, 0, 255,THRESH_OTSU|type_value);//自动计算阈值。
//threshold(gray_src, dst, 0, 255, THRESH_TRIANGLE | type_value);//三角法计算阈值。
imshow(out_put, dst);
}