C# OpenCvSharp 图像变换与增强-convertScaleAbs、log、exp、pow、sqrt、equalizeHist、CLAHE、detailEnhance、illuminatio

1. convertScaleAbs

作用

将图像转为8位无符号图像,并进行线性变换(y = ax + b)。

示例

项目:调整图片的亮度和对比度。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg"); // 读取输入图像
Mat dst = new Mat();
double alpha = 1.5; // 对比度因子
double beta = 50; // 亮度偏移值

Cv2.ConvertScaleAbs(src, dst, alpha, beta);
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

alpha 增加对比度。值越大,对比度越高。
beta 增加亮度。值越大,图像越亮。

运算过程:

每个像素的新值 = 原值 * 1.5 + 50

结果:

图像变得更亮且对比度更高。

2. log

作用

对图像进行对数变换,通常用于增强图像的细节。

示例

项目:增强图像细节。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg", ImreadModes.Grayscale); // 读取灰度图像
src.ConvertTo(src, MatType.CV_32F); // 转换为浮点型
Mat dst = new Mat();

Cv2.Log(src + 1, dst); // 对数变换,避免对数0
Cv2.ConvertScaleAbs(dst, dst); // 转换为8位图像
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

src + 1 避免对数0错误。
log 对数变换,增强细节。
运算过程:
每个像素的新值 = log(原值 + 1)

结果:

图像细节更清晰。

3. exp

作用

对图像进行指数变换,通常用于图像增强。

示例

项目:增强图像亮度。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg", ImreadModes.Grayscale); // 读取灰度图像
src.ConvertTo(src, MatType.CV_32F); // 转换为浮点型
Mat dst = new Mat();

Cv2.Exp(src, dst); // 指数变换
Cv2.ConvertScaleAbs(dst, dst); // 转换为8位图像
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

exp 指数变换,增强亮度。
运算过程:
每个像素的新值 = exp(原值)

结果:

图像变得更亮。

4. pow

作用

对图像进行幂变换,通常用于图像增强。

示例

项目:增强图像对比度。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg", ImreadModes.Grayscale); // 读取灰度图像
src.ConvertTo(src, MatType.CV_32F); // 转换为浮点型
Mat dst = new Mat();
double power = 2.0; // 幂指数

Cv2.Pow(src, power, dst); // 幂变换
Cv2.ConvertScaleAbs(dst, dst); // 转换为8位图像
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

power 幂指数,值越大,对比度越高。
运算过程:
每个像素的新值 = (原值)^2

结果:

图像对比度更高。

5. sqrt

作用

对图像进行开方变换,通常用于图像增强。

示例

项目:降低图像对比度。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg", ImreadModes.Grayscale); // 读取灰度图像
src.ConvertTo(src, MatType.CV_32F); // 转换为浮点型
Mat dst = new Mat();

Cv2.Sqrt(src, dst); // 开方变换
Cv2.ConvertScaleAbs(dst, dst); // 转换为8位图像
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

sqrt 开方变换,降低对比度。
运算过程:
每个像素的新值 = sqrt(原值)

结果:

图像对比度降低。

6. equalizeHist

作用

直方图均衡化,用于增强图像对比度。

示例

项目:增强图像对比度。

代码:

u

sing OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg", ImreadModes.Grayscale); // 读取灰度图像
Mat dst = new Mat();

Cv2.EqualizeHist(src, dst); // 直方图均衡化
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

equalizeHist 直方图均衡化,增强对比度。
运算过程:
重新分配像素值,使得图像的对比度更高。

结果:

图像对比度更高。

7. CLAHE

作用

限制对比度自适应直方图均衡化,用于增强图像。

示例

项目:增强图像对比度。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg", ImreadModes.Grayscale); // 读取灰度图像
Mat dst = new Mat();

CLAHE clahe = Cv2.CreateCLAHE(clipLimit: 2.0, tileGridSize: new Size(8, 8));
clahe.Apply(src, dst); // 自适应直方图均衡化
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

clipLimit 限制对比度。
tileGridSize 分块大小。
运算过程:
分块均衡化,增强对比度。

结果:

图像对比度更高,且过渡自然。

8. detailEnhance

作用

增强图像细节。

示例

项目:增强图像细节。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead("input.jpg"); // 读取输入图像
Mat dst = new Mat();
float sigma_s = 10; // 控制邻域大小
float sigma_r = 0.15f; // 控制邻域内不同颜色的平均值

Cv2.DetailEnhance(src, dst, sigma_s, sigma_r); // 细节增强
Cv2.ImWrite("output.jpg", dst); // 保存输出图像

解释:

sigma_s 控制邻域大小,值越大,图像越平滑。
sigma_r 控制邻域内不同颜色的平均值,值越小,保留更多边界。
运算过程:
增强细节,使图像更清晰。

结果:

图像细节更清晰。

  1. illuminationChange

作用

改善图像的亮度,去除高光部分。

示例

项目:去除图像高光部分。

代码:

using OpenCvSharp;

Mat src = Cv2.ImRead(“input.jpg”); // 读取输入图像
Mat mask = new Mat(src.Size(), MatType.CV_8UC1, Scalar.All(255)); // 创建掩码
Mat dst = new Mat();
float alpha = 0.2f; // 控制消除高光后的模糊程度
float beta = 0.4f; // 控制消除高光后的模糊程度

Cv2.IlluminationChange(src, mask, dst, alpha, beta); // 改善亮度
Cv2.ImWrite(“output.jpg”, dst); // 保存输出图像

解释:

alpha 控制消除高光后的模糊程度。
beta 控制消除高光后的模糊程度。
运算过程:
去除高光部分,改善亮度。

结果:

图像亮度更均匀,高光部分减少。

通过这些示例,小学生可以更容易理解这些函数的作用和使用方法,同时也能看到实际应用中的效果。希望这些生动的例子能够帮助读者保持浓厚的兴趣,掌握这些干货知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值