opencv_c++学习(九)

本文介绍了图像处理中的两种技术:固定阈值和自适应阈值的二值化方法,以及LUT(查找表)的应用。二值化通过设定阈值将图像转换为黑白,而LUT允许将特定范围的灰度值映射为新的值,实现图像快速变换。示例代码展示了如何在OpenCV中实现这些操作。
摘要由CSDN通过智能技术生成

一、图像二值化

固定阈值二值化

threshold ( lnputArray src, outputArray dst,double thresh, double maxvall, int type

src:待二值化的图像,图像只能是CV_8U和CV_32F两种数据类型。对于图像通道数目的要求和选择的二值化方法相关。
dst:二值化后的图像,与输入图像具有相同的尺寸、数据类型和通道数。thresh:二值化的阀值。
maxval:二值化过程的最大值。
type:选择图像二值化方法的标志。

自适应阈值二值化

adaptiveThreshold(lnputArray src, outputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize,
double c)

src:二值化的图像,图像只能是CV_8UC1数据类型。
dst:二值化后的图像,与输入图像具有相同的尺寸、数据类型。
max Value:二值化的最大值。
adaptiveMethod:自制应确定阈值的方法,分为均值法ADAPTIVE_THRESH_MEAN_C和高斯法ADAPTIVE_THRESH_GAUSSIAN_C这两种。
thresholdType:选择图像二值化方法的标志,只能是THRESH_ BINARY和THRESH_BINARY_INV。
blockSize:自适应确定阈值的像素邻域大小,一般为3,5,7的奇数。
C:从平均值或者加权平均值中减去的常数,可以为正,也可以为负。
代码样例如下:

adaptiveThreshold(img_Thr,adaptive_mean, 255, ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,550);
adaptiveThreshold(img_Thr,adaptive_meaQ 255, ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,55,0);

二、LUT查找表

在这里插入图片描述
LUT查找表样例如上,就是将以定范围内的值映射为不同的数组操作。

LUT(InputArray Src,lnputArray lut,OutputArray dst)

src:输入图像矩阵,其数据类型只能是CV_8U。
lut: 256个像素灰度值的查找表,单通道或者与src通道数相同。
dst:输出图像矩阵,其尺寸与src相同,数据类型与lut相同。
样例代码如下:

	//查找表第一层
	uchar lutFirst[256];

	for (int i = 0; i < 256; i++)
	{
		if (i <= 100)
			lutFirst[i] = 0;
		if (i>100 && i<= 200)
		{
			lutFirst[i] = 100;
		}

		if (i > 200)
		{
			lutFirst[i] = 255;
		}
	}

	Mat lutOne(1, 255, CV_8UC1, lutFirst);

	//查找表第一层
	uchar lutSecond[256];

	for (int i = 0; i < 256; i++)
	{
		if (i <= 100)
			lutFirst[i] = 0;
		if (i > 100 && i <= 200)
		{
			lutFirst[i] = 150;
		}

		if (i > 200)
		{
			lutFirst[i] = 255;
		}
	}

	Mat lutTwo(1, 255, CV_8UC1, lutSecond);

	//查找表第三层
	uchar lutThird[256];

	for (int i = 0; i < 256; i++)
	{
		if (i <= 100)
			lutFirst[i] = 0;
		if (i > 100 && i <= 200)
		{
			lutFirst[i] = 200;
		}

		if (i > 200)
		{
			lutFirst[i] = 255;
		}
	}

	Mat lutThree(1, 255, CV_8UC1, lutThird);

	//将三层生成为多通道的矩阵
	vector<Mat> mergeMats;
	mergeMats.push_back(lutOne);
	mergeMats.push_back(lutTwo);
	mergeMats.push_back(lutThree);

	Mat LutTree;
	//合并多通道
	merge(mergeMats, LutTree);

	//读取图片
	Mat src = imread("图片2.png");

	Mat gray, out0, out1, out2;

	cvtColor(src, gray, COLOR_BGR2GRAY);

	//映射像素值
	LUT(gray, lutOne, out0);
	LUT(src, lutOne, out1);
	LUT(src, LutTree, out2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值