阈值二值化(threshold binary)
蓝色线对应值为选定的阈值。所有像素值小于这一值的设定为0,否则设定为最大值1。
阈值反二值化(threshold binary inverted)
蓝色线对应值为选定的阈值。所有像素值小于这一值的设定为1,否则设定为最小值0。
截断(truncate)
像素值大于阈值的就设定为阈值大小,否则保持不变。
阈值取零(threshold to zero)
像素值小于阈值的全部设为0,大于的保持不变。
阈值反取零(threshold to zero inverted)
像素值大于阈值的全部设为0,小于的保持不变。
OpenCV提供的阈值操作
提供API:
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
实例代码:
#include "opencv2/opencv.hpp"
#include "iostream"
using namespace cv;
using namespace std;
int value = 127;//选定的阈值
int maxValue = 255;//像素最大值
int type=0;
int maxType=4;
char *outPut = "阈值化";
Mat src,dest,gray;
void CallBackFun2(int,void*);
void ThresholdOper(){
src = imread("lena.jpg");
if(!src.data){
cout << "图像打开失败!" << endl;
return ;
}
namedWindow("原图",CV_WINDOW_AUTOSIZE);
imshow("原图",src);
namedWindow(outPut,CV_WINDOW_AUTOSIZE);
createTrackbar("value",outPut,&value,maxValue,CallBackFun2);
createTrackbar("type",outPut,&type,maxType,CallBackFun2);
CallBackFun2(0,0);
cvWaitKey();
}
void CallBackFun2(int,void*){
cvtColor(src,gray,CV_RGB2GRAY);
/*
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
thresh – 选定阈值.
maxval – maximum value to use with the THRESH_BINARY and THRESH_BINARY_INV thresholding types.
type:
THRESH_BINARY
THRESH_BINARY_INV
THRESH_TRUNC
THRESH_TOZERO
THRESH_TOZERO_INV
*/
threshold(gray,dest,value,maxValue,type);
imshow(outPut,dest);
return ;
}
int main(){
ThresholdOper();
return 0;
}
对于阈值的选定我们可以自己指定也可以让程序自己计算,使用参数:THRESH_OTSU .
threshold(gray,dest,value,maxValue,THRESH_OTSU | type);
使用程序计算的阈值后即使我们拖动滑动条也无法改变阈值。