步骤:
adapativeThreshold():

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
Mat src, dst, bilary_gray, output;
int main(int argc, char** argv) {
src = imread("D:/OpenCVprj/image/test6.jpg");
if (!src.data) {
cout << "Could not load image......\n" << endl;
return -1;
}
imshow("src", src);
cvtColor(src, dst, CV_BGR2GRAY);
imshow("dst", dst);
adaptiveThreshold(~dst, bilary_gray, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
//double maxValue,二值图像最大值
//int adaptiveMethod,自适应方法,只能其中之一 - ADAPTIVE_THRESH_MEAN_C , ADAPTIVE_THRESH_GAUSSIAN_C
//int thresholdType,阈值类型
//int blockSize,块大小
//double C, 常量C 可以是正数,0,负数
imshow("bilary_gray", bilary_gray);
Mat kernel1 = getStructuringElement(MORPH_RECT, Size(dst.cols/16, 1), Point(-1, -1));
//Mat kernel2 = getStructuringElement(MORPH_RECT, Size(1, dst.rows/16), Point(-1, -1));
erode(bilary_gray, dst, kernel1);
dilate(dst, output, kernel1);
bitwise_not(output, output);
imshow("output", output);
waitKey(0);
return 0;
}

应用补充:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
Mat src, dst, bilary_gray, output;
int main(int argc, char** argv) {
src = imread("D:/OpenCVprj/image/test6.jpg");
if (!src.data) {
cout << "Could not load image......\n" << endl;
return -1;
}
imshow("src", src);
cvtColor(src, dst, CV_BGR2GRAY);
imshow("dst", dst);
adaptiveThreshold(~dst, bilary_gray, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
//double maxValue,二值图像最大值
//int adaptiveMethod,自适应方法,只能其中之一 - ADAPTIVE_THRESH_MEAN_C , ADAPTIVE_THRESH_GAUSSIAN_C
//int thresholdType,阈值类型
//int blockSize,块大小
//double C, 常量C 可以是正数,0,负数
imshow("bilary_gray", bilary_gray);
//Mat kernel1 = getStructuringElement(MORPH_RECT, Size(dst.cols/16, 1), Point(-1, -1));
//Mat kernel2 = getStructuringElement(MORPH_RECT, Size(1, dst.rows/16), Point(-1, -1));
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
erode(bilary_gray, dst, kernel);
dilate(dst, output, kernel);
bitwise_not(output, output);
//blur(output, output, Size(3, 3), Point(-1, -1));
imshow("output", output);
waitKey(0);
return 0;
}

原文:https://www.cnblogs.com/haiboxiaobai/p/11235972.html