1.图像阈值类型(threshold)
简单来说,阈值是图像分割的标尺,这个标尺由算法产生
阈值类型——阈值二值化(THERSH_BINARY)
设定某个值为阈值,比阈值大的设置为最大值,比阈值小的设置为0
阈值类型——阈值反二值化(THRESH_BINARY_INV)
设定某个值为阈值,比阈值打的设置为0,比阈值小的设置为最大值
阈值类型——截断(THRESH_TRUNC)
设定某个值为阈值,比阈值大的值均设置为阈值大小,比阈值小的值保持不变
阈值类型——阈值取零(THRESH_TOZERO)
设定某个值为阈值,比阈值大的值保持不变,比阈值小的值均设置为0
阈值类型——阈值反取零(THRESH_TOZERO_INV)
设定某个值为阈值,比阈值大的值设置为0,比阈值小的值保持不变
Opencv提供了两种方法去自动的寻找阈值
THRESH_OTSU
THRESH_TRIANGLE
2.阈值API
threshold(
cv::InputArray src, // 输入图像
cv::OutputArray dst, // 输出图像
double thresh, // 阈值
double maxValue, // 向上最大值
int thresholdType // 阈值化操作的类型
);
代码演示
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
using namespace std;
Mat src, dst,gray;
int threshold_value = 127; //阈值
int threshold_max = 255; //最大值
int type_value = 2;
int type_max = 4;
const char* output_title = "binary image";
void Threshold_Demo(int,void*) {
//图像必须是灰度的8位图像
cvtColor(src, gray, COLOR_BGR2GRAY);
//threshold(gray, dst, threshold_value, threshold_max, THRESH_BINARY); //图像二值化
threshold(gray,dst,threshold_value, threshold_max, type_value); //图像反向二值化
imshow(output_title,dst);
}
int main(int argc, char** argv) {
src = imread("D:/image/img1.jpg");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("src" , WINDOW_AUTOSIZE);
namedWindow(output_title,WINDOW_AUTOSIZE);
imshow("src", 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;
}