版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
一、阈值
必须是对 单通道 图( 特别是灰度图 )进行阈值操作
1.固定阈值:Threshold()
原型
double threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
);
参数
- src:输入图像
- dst:输出图像
- thresh:double类型的阈值数(0-255)
- maxval:阈值的最大值(0-255),只在THRESH_BINARY和THRESH_BINARY_INV下有效
- type:阈值类型(分别对应0、1、2、3、4)。
一般使用THRESH_BINARY和THRESH_BINARY_INV将灰度图转化为二值图(非黑即白)
阈值和阈值类型的滑动条
#include<opencv2/opencv.hpp>
using namespace cv;
#define WINDOW_NAME "ThresholdWindow"
int g_thresholdValue=100;
int g_thresholdType=0;
Mat g_srcImage,g_dstImage;
void onChange(int,void*)
{
threshold(g_srcImage,g_dstImage,g_thresholdValue,255,g_thresholdType);
imshow(WINDOW_NAME,g_dstImage);
}
int main()
{
g_srcImage=imread("M569_989_066.jpg",0);
namedWindow(WINDOW_NAME,WINDOW_NORMAL);
createTrackbar("ThresholdType",WINDOW_NAME,&g_thresholdType,4,onChange);
createTrackbar("ThresholdValue",WINDOW_NAME,&g_thresholdValue,255,onChange);
onChange(0,0);
waitKey();
return 0;
}
阈值为180左右,四种识别效果最好。
2.自适应阈值:adaptiveThreshold()
原型
void adaptiveThreshold(
InputArray src,
OutputArray dst,
double maxval,
int adaptiveMethod,
int thresholdType,
int blockSize,
double c
);
参数
- src:输入图像
- dst:输出图像
- maxval:阈值最大值
- type:阈值类型
- adaptiveMethod:
- thresholdType:
- blockSize:
- c:
3.srcImage=srcImage>180
srcImage是灰度图
Mat srcImage=imread("M569_989_066.jpg",0);
srcImage=srcImage>180;
imshow("Effect",srcImage);
//效果是二值图,和二进制阈值类型的一样。