opencv学习-基本阈值操作

Posted 殇堼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv学习-基本阈值操作相关的知识,希望对你有一定的参考价值。

阈值(threshold):图像分割的标尺

1.阈值分割的方法

根据阈值进行分割,其方法包括:
1.二值化:像素值大于某个阈值的设置为255,其余像素都是0,即可实现灰度图像转为二值化图像。

2.反二值化

3.截断

4.阈值取零:小于阈值的像素取零

5.阈值反取零
在这里插入图片描述

2.图像的阈值操作API

如下:

double threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
);
函数参数含义如下:

(1)InputArray类型的src ,输入图像,多通道、8位或32位浮点。

(2)OutputArray类型的dst ,输出图像,图像的大小、类型、通道数和输入图像相同。

(3)double类型的thresh,阈值。

(4)double类型的maxval,使用THRESH_BINARY 和THRESH_BINARY_INV阈值类型时候的最大值。

(5)int类型的type,阈值类型,取值参见:cv::ThresholdTypes。

3.代码演示

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

//全局变量
Mat src, dst;
int thresholdValue = 127;
int thresholdMax = 255;
int typeValue = 2;
int typeMax = 4;//对应5种阈值分割的方法
const char* output_title = "binary img";//窗口名称“二值化图像”

//定义Threshold_Demo函数,用于图像的阈值
void Threshold_Demo(int, void*)
{
	threshold(src, dst, thresholdValue, thresholdMax, typeValue);
	imshow(output_title, dst);
}
//主函数入口
int main()
{
	src = imread("D:/images/lena.png");
	if (src.empty())
	{
		cout << "could not load image..." << endl;
		return -1;
	}
	imshow("原图", src);

	namedWindow(output_title, WINDOW_AUTOSIZE);
	createTrackbar("Threshold Value", output_title, &thresholdValue, thresholdMax, Threshold_Demo);//动态调整
	createTrackbar("Type Value", output_title, &typeValue, typeMax, Threshold_Demo);
	
	//调用Threshold_Demo函数
	Threshold_Demo(0, 0);
	imshow(output_title, dst);
	waitKey(0);
	return 0;
}

4.结果

在这里插入图片描述

以上是关于opencv学习-基本阈值操作的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 基本阈值操作

OpenCV之基本阈值操作

OpenCV之基本阈值操作

OpenCV之基本阈值操作

Opencv学习笔记——基础知识

《学习OpenCV3》第10章 滤波与卷积