大宇私人领地伊甸园丨宁愿做了后悔,也不要错过后悔[www.mrdayu.com]
注册

24小时联系邮箱:[email protected]

所有文章
大宇私人伊甸园: 首页 > 所有文章 > 编程人生 > 开源库 > opencv > [001.15]基本阈值操作

[001.15]基本阈值操作

发布时间:2018/08/11 opencv 标签阈值阅读:35

基本阈值操作:

  • 图像阈值
  • 阈值类型
  • 代码演示

图像阈值(threshold):

阈值 是什么?

简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation

阈值类型一阈值二值化(threshold binary):

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

阈值类型一阈值反二值化(threshold binary Inverted):

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

阈值类型一截断 (truncate):

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

阈值类型一阈值取零 (threshold to zero):

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

阈值类型一阈值反取零 (threshold to zero inverted):

左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

阈值:

测试效果:

代码实现:

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

using namespace cv;
Mat src, gray_src, dst;
int threshold_value = 127;
int threshold_max = 255;
int type_value = 2;
int type_max = 4;
const char* output_title = "binary image";
void Threshold_Demo(int, void*);
int main(int argc, char** argv) {
	src = imread("C:/dangtao.jpg");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);
	imshow("input image", src);

	createTrackbar("Threshold Value:", output_title, &threshold_value, threshold_max, Threshold_Demo);
	createTrackbar("Type Value:", output_title, &type_value, type_max, Threshold_Demo);
	Threshold_Demo(0, 0);

	waitKey(0);
	return 0;
}

void Threshold_Demo(int, void*) {
	cvtColor(src, gray_src, CV_BGR2GRAY);
	threshold(gray_src, dst, threshold_value, threshold_max, type_value);
	imshow(output_title, dst);
}

函数原形:

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)

参数信息:

第一个参数,InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Mat即可。

第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型。

第三个参数,double类型的thresh,阈值的具体值。

第四个参数,double类型的maxval,当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值.

第五个参数,int类型的type,阈值类型,。

其它参数很好理解,我们来看看第五个参数,第五参数有以下几种类型

0: THRESH_BINARY  当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0

1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval

2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变

3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0

4: THRESH_TOZERO_INV  当前点值大于阈值时,设置为0,否则不改变

The bottom line, for me, is simple.

Let’s hope it doesn’t take 500 years for a discipline of testing to becomes the standard for software developers.

From:dayu

您好!请登录

合作网站快捷登录:
点击取消回复

已有0评论

    大宇博客

    点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息