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 控制邻域内不同颜色的平均值,值越小,保留更多边界。
运算过程:
增强细节,使图像更清晰。
结果:
图像细节更清晰。
- 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 控制消除高光后的模糊程度。
运算过程:
去除高光部分,改善亮度。
结果:
图像亮度更均匀,高光部分减少。
通过这些示例,小学生可以更容易理解这些函数的作用和使用方法,同时也能看到实际应用中的效果。希望这些生动的例子能够帮助读者保持浓厚的兴趣,掌握这些干货知识。