15.基本阈值操作

  1. 主要内容
    图像阈值
    阈值类型
    二值化分割——五种方式的算法了解
    寻找阈值 ——两种方式的算法了解
  2. 阈值(threshold)
    简单点说是把图像分割的标尺,我们也可以自己设定阈值的大小。
    OpenCV提供两种阈值产生算法
  3. 阈值的类型
    (1)类型一——阈值二值化(threshold binarg)
    左下方的图表示图像像素点Src(x,y)值的分布情况,蓝色水平线表示阈值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(2)类型二——阈值反二值化(threshold binary lnverted)
左下方的图表示图像像素点Src(x,y)值的分布情况,蓝色水平线表示阈值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)类型三——截断(truncate)
左下方的图表示图像像素点Src(x,y)值的分布情况,蓝色水平线表示阈值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)类型四——阈值取零(threshold to zero)
左下方的图表示图像像素点Src(x,y)值的分布情况,蓝色水平线表示阈值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)类型五——阈值反取零(threshold to zero inverted)
左下方的图表示图像像素点Src(x,y)值的分布情况,蓝色水平线表示阈值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 类型表示汇总
    在这里插入图片描述
    前五种分别是不同类型的阈值方法
    最后两种是产生阈值的方法
    注意事项:
    使用 THRESH_OTSU 和 THRESH_TRIANGLE做阈值的时候,图像只能是8位单通道的图像(灰度图),否则程序报错

  2. 相关API
    (1)阈值操作

threshold(
InputArray src,//输入图像
InputArray dst,//输出图像
double thresh,//阈值
double maxval,//最大值
int type//类型
)

(2) 使用自动选取阈值

threshold(gray_src,dst,0,255,THRESH_OTSU|type_value);
threshold(gray_src,dst,0,255,THRESH_TRIANGLE|type_value);
//此时由于自动选取阈值,所以仅需要填写最大值即可,阈值自动计算,无法改变
//type_value:此处填写不同阈值方法的宏
  1. 最终代码
#include<opencv2\opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

void  on_Trackbar(int, void *);

int g_nAlphaValueSlider;
const int g_nMaxAlphaValue = 255;
int g_nNowchoose=0;
const int g_nMaxValue = 4;

Mat src, BIn_image,BInINV_image,TRu_image, ZERO_image,ZEROINV_image,gray_image;

int main(int argc, char **argv) {
	src = imread("G:\\photo\\test.jpg");
	namedWindow("图像二值化测试", CV_WINDOW_AUTOSIZE);
	cvtColor(src, gray_image, CV_BGR2GRAY);
	if (src.empty()) {
		cout << "We could not find this photo.." << endl;
	}
	imshow("原图像", gray_image);

	createTrackbar("当前图像阈值", "图像二值化测试",&g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);
	createTrackbar("当前阈值类型", "图像二值化测试", &g_nNowchoose, g_nMaxValue, on_Trackbar);
	on_Trackbar(g_nAlphaValueSlider,0);

	waitKey(0);
	return 0;
}
//THRESH_BINAR=0,THRESH_BINARY_INV=1,THRESH_TRUNC=2,THRESH_TOZERO=3,THRESH_TOZERO_INV=4;

void  on_Trackbar(int ,void *) {
	char type[20];
	threshold(gray_image, BIn_image, g_nAlphaValueSlider, g_nMaxAlphaValue, THRESH_TRIANGLE | g_nNowchoose);
	imshow("图像二值化测试", BIn_image);
	switch (g_nNowchoose)
	{
	case(0): 
		cout << "阈值二值化" << endl;
		break;
	case(1):
		cout << "阈值反二值化" << endl;
		break;
	case(2):
		cout << "截断" << endl;
		break;
	case(3):
		cout << "阈值取零" << endl;
		break;
	case(4):
		cout << "阈值反取零" << endl;
		break;
	}
}
/*

threshold(src, BIn_image, thresh,255,THRESH_BINARY);
imshow("阈值二值化", BIn_image);

threshold(src, BInINV_image, thresh, 255, THRESH_BINARY_INV);
imshow("阈值反二值化", BInINV_image);

threshold(src, TRu_image, thresh, 255, THRESH_TRUNC);
imshow("截断", TRu_image);

threshold(src, ZERO_image, thresh, 255, THRESH_TOZERO);
imshow("阈值取零", ZERO_image);

threshold(src, ZEROINV_image, thresh, 255, THRESH_TOZERO_INV);
imshow("阈值反取零", ZEROINV_image);

*/
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值