OpenCV学习十四:threshold、adaptiveThreshold 阀值
程序员文章站
2024-03-22 09:41:10
...
threshold(
cv::InputArray src, // 输入图像
cv::OutputArray dst, // 输出图像
double thresh, // 阈值
double maxValue, // 向上最大值
int thresholdType // 阈值化操作的类型
);
几种操作类型,前五个对应下面原理图:
THRESH_BINARY 普通二值化
THRESH_BINARY_INV 普通二值化——取反
THRESH_TRUNC 截取峰值二值化
THRESH_TOZERO 取零二值化
THRESH_TOZERO_INV 取零二值化——取反
THRESH_OTSU 使用Otsu原理确定最优阀值大小
THRESH_TRIANGLE 使用三角函数原理确定最优阀值大小
原理图
#include <opencv2/opencv.hpp>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
char file[] = "1.jpg";
int main(int argc, char** argv)
{
Mat img = imread(file, -1);
pyrDown(img, img, Size(img.cols/2, img.rows/2));
cvtColor(img, img, CV_BGR2GRAY);
imshow("1",img);
Mat out;
threshold(img, out, 127, 255, THRESH_BINARY);
imshow("2",out);imwrite("2.jpg", out);
threshold(img, out, 0, 255, THRESH_OTSU | THRESH_BINARY_INV);//使用Otsu方法确定最优阀值,但是选取的阀值方法需要这样填写
imshow("3",out);imwrite("3.jpg", out);
waitKey();
return 1;
}
2.jpg
3.jpg
adaptiveThreshold(
InputArray src, //源图像
OutputArray dst, //输出图像,与源图像大小一致
double maxValue, //最大值
int adaptiveMethod, //在一个邻域内计算阈值所采用的算法。
ADAPTIVE_THRESH_MEAN_C的计算方法是计算出领域的平均值再减去第七个参数double C的值
ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出领域的高斯均值再减去第七个参数double C的值
int thresholdType, //这是阈值类型,只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV
int blockSize, //adaptiveThreshold的计算单位是像素的邻域块,邻域块取多大,就由这个值作决定
double C//这个参数实际上是一个偏移值调整量
);
#include <opencv2/opencv.hpp>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
char file[] = "1.jpg";
int main(int argc, char** argv)
{
Mat img = imread(file, -1);
pyrDown(img, img, Size(img.cols/2, img.rows/2));
cvtColor(img, img, CV_BGR2GRAY);
imshow("1",img);
Mat out;
adaptiveThreshold(img, out, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 9, 0);
imshow("4",out);imwrite("4.jpg", out);
waitKey();
return 1;
}
4.jpg
推荐阅读
-
opencv学习—threshold函数的使用(python)
-
OpenCV学习十四:threshold、adaptiveThreshold 阀值
-
OpenCV3学习笔记(5):阈值化操作,threshold()和adaptiveThreshold()
-
opencv学习笔记三十四:透视变换
-
【OpenCV学习笔记】之基本阈值操作(Threshold)
-
【OpenCV学习】阈值处理错误:error: (-215:Assertion failed) src.type() == CV_8UC1 in function ‘threshold‘
-
opencv学习日记——3` threshold&inRange
-
opencv学习笔记十四:canny边缘检测
-
【OpenCV学习】阈值处理错误:error: (-215:Assertion failed) src.type() == CV_8UC1 in function ‘threshold‘