OpenCV-C++图像自适应阈值二值化处理adaptiveThreshold
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenCV-C++图像⾃适应阈值⼆值化处理adaptiveThreshold API介绍
这篇⽂章主要介绍有关adaptiveThreshold的使⽤⽅式;
⾸先,来看⼀下调⽤格式;
void adaptiveThreshold( InputArray src, OutputArray dst,
double maxValue, int adaptiveMethod,
int thresholdType, int blockSize, double C );
src表⽰需要进⾏⼆值化的图像;需要注意的是,该输⼊必须是8-bit单通道的图像;
dst表⽰输出图像的⼆值图像;
maxValue是⼀个⾮零值,⽤于对哪些满⾜条件的阈值进⾏赋值;
adaptiveMethod表⽰选择哪⼀种⾃适应阈值算法;Opencv提供两种,ADAPTIVE_THRESH_MEAN_C与ADAPTIVE_THRESH_GAUSSIAN_C,下⾯会详细介绍;
thresholdType表⽰⼆值化类型,OpenCV提供两种, THRESH_BINARY与THRESH_BINARY_INV,下⾯会详细介绍;
blocksize表⽰参与计算的像素的领域范围,必须使⽤奇数;
C可以为正数, 零或者负数;⽤于在计算过程中容忍程度;
thresholdType介绍
OpenCV在adaptiveThreshold⽅法中允许使⽤两种ThresholdTypes,毕竟是进⾏⼆值化处理;分别为:
THRESH_BINARY
THRESH_BINARY_INV
计算⽅式如下:
其中,\(src(x, y)\)表⽰原始灰度图像灰度值,\(T(x, y)\)是根据⾃适应阈值算法计算得到;计算的⽅式来⾃于adaptiveMethod; adaptiveMethod介绍
OpenCV提供两种⾃适应阈值算法:
ADAPTIVE_THRESH_MEAN_C
ADAPTIVE_THRESH_GAUSSIAN_C
其中,第⼀种ADAPTIVE_THRESH_MEAN_C,针对像素\((x, y)\)的计算⽅式如下:
\(T(x, y)\)结果是在\((x, y)\)的邻域\(blockSize \times blockSize\)范围内所有灰度值的均值减去\(C\);
第⼆种ADAPTIVE_THRESH_GAUSSIAN_C,针对像素\((x, y)\)的计算⽅式如下:
⾸先,⽣成⼀个⼤⼩为\(blockSize \times blockSize\)的⾼斯核,作为权重;
其次,利⽤⾼斯核与\((x, y)\)邻域范围内灰度值,进⾏加权求和,再减去\(C\),得到\(T(x, y)\);
⽰例:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
/**
* adaptiveThreshold的使⽤
*/
int main(){
// 读取图像
Mat src = imread("/home/chen/dataset/lena.jpg");
if (! src.data){
cout << "could not load image." << endl;
return -1;
}
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", src);
// 转成灰度图
Mat srcGray;
cvtColor(src, srcGray, COLOR_BGR2GRAY);
namedWindow("srcGray", WINDOW_AUTOSIZE);
imshow("srcGray", srcGray);
// ⾃适应阈值⼆值化
Mat srcBinary;
adaptiveThreshold(~srcGray, srcBinary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 11, -2); namedWindow("srcBinary", WINDOW_AUTOSIZE);
imshow("srcBinary", srcBinary);
waitKey(0);
return 0;
}。