1 阈值分割
目录
扫描二维码关注公众号,回复:
11311002 查看本文章
1.1 图像处理效果展示
1.1.1 固定阈值分割效果展示
处理前
原图
处理后
THRESH_BINARY方法
THRESH_BINARY_INV方法
THRESH_TRUNC方法
THRESH_TOZERO方法
THRESH_TOZERO_INV方法
1.1.2 自适应阈值分割效果展示
处理前
原图
处理后
gaussian方法:对应参数为ADAPTIVE_THRESH_GAUSSIAN_C
mean方法:对应参数为ADAPTIVE_THRESH_MEAN_C
1.2 阈值分割原理
1.2.1 固定阈值分割原理
1.2.2 自适应阈值分割原理
1.3 代码展示
1.3.1 固定阈值分割代码
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("C:\\Users\\SYYSP\\Desktop\\dinisha.jpg");
imshow("原图", srcImage);
if (!srcImage.data)
{
cout << "fail to load image" << endl;
return 0;
}
Mat dstImage1, dstImage2, dstImage3, dstImage4, dstImage5;
double thresh = 100;
int maxVal = 255;
cv::threshold(srcImage, dstImage1, thresh, maxVal, cv::THRESH_BINARY);
//imshow("THRESH_BINARY", dstImage1);
imwrite("C:\\Users\\SYYSP\\Desktop\\THRESH_BINARY.jpg", dstImage1);
cv::threshold(srcImage, dstImage2, thresh, maxVal, cv::THRESH_BINARY_INV);
//imshow("THRESH_BINARY_INV", dstImage2);
imwrite("C:\\Users\\SYYSP\\Desktop\\THRESH_BINARY_INV.jpg", dstImage2);
cv::threshold(srcImage, dstImage3, thresh, maxVal, cv::THRESH_TRUNC);
//imshow("THRESH_TRUNC", dstImage3);
imwrite("C:\\Users\\SYYSP\\Desktop\\THRESH_TRUNC.jpg", dstImage3);
cv::threshold(srcImage, dstImage4, thresh, 150, cv::THRESH_TOZERO);
//imshow("THRESH_TOZERO", dstImage4);
imwrite("C:\\Users\\SYYSP\\Desktop\\THRESH_TOZERO.jpg", dstImage4);
cv::threshold(srcImage, dstImage5, thresh, 150, cv::THRESH_TOZERO_INV);
//imshow("THRESH_TOZERO", dstImage5);
imwrite("C:\\Users\\SYYSP\\Desktop\\THRESH_TOZERO_INV.jpg", dstImage5);
//cout << dstImage1 << endl;
waitKey(0);
return 0;
}
1.3.2 自适应阈值分割代码
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("C:\\Users\\SYYSP\\Desktop\\dajian.jpg", cv::IMREAD_GRAYSCALE);
//自适应阈值函数只能处理单通道灰度图像,如果三通道会出错
imshow("原图", srcImage);
if (!srcImage.data)
{
cout << "fail to load image" << endl;
return 0;
}
Mat dstImage1, dstImage2;
double maxVal = 255;
int blockSize = 41;
double C = 20;
cv::adaptiveThreshold(srcImage, dstImage1, maxVal, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, blockSize, C);
//imshow("mean", dstImage1);
imwrite("C:\\Users\\SYYSP\\Desktop\\mean.jpg", dstImage1);
cv::adaptiveThreshold(srcImage, dstImage2, maxVal, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, blockSize, C);
//imshow("gaussian", dstImage2);
imwrite("C:\\Users\\SYYSP\\Desktop\\gaussian.jpg", dstImage2);
waitKey(0);
return 0;
}