欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 使用三角函数原理确定最优阀值大小

原理图

OpenCV学习十四:threshold、adaptiveThreshold 阀值

#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

OpenCV学习十四:threshold、adaptiveThreshold 阀值

 

3.jpg

OpenCV学习十四:threshold、adaptiveThreshold 阀值

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、adaptiveThreshold 阀值