012_OpenCV 像素強度變換(convertTo) _ 阿洲的程式教學1
需积分: 0 162 浏览量
更新于2022-08-03
收藏 473KB PDF 举报
在OpenCV中,`convertTo`函数是一种常用的像素强度变换工具,它允许对图像的每个像素执行特定的运算,以改变图像的对比度、亮度等属性。这个函数主要用于线性及非线性的图像强度转换,从而调整图像的整体视觉效果。
线性强度变换是最基本的图像处理操作之一,它可以通过一个简单的线性方程来表达:`x' = a*x + b`。在这个方程中,`x`代表输入图像的灰度值,`x'`代表输出图像的灰度值,`a`是斜率(放大因子),`b`是截距(偏移量)。当`a > 1`时,图像的对比度增强;`a < 1`时,对比度减弱。如果`a = 1`且`b != 0`,则图像整体变亮或变暗;当`a = -1`且`b = 255`时,图像灰度值反转,有助于突出暗部细节。
OpenCV中的`convertTo`函数使用如下:
```cpp
void Mat::convertTo(OutputArray m, int rtype, double alpha=1, double beta=0)
```
参数说明如下:
- `m`:输出图像,如果与原图像尺寸或类型不同,会自动分配空间。
- `rtype`:指定输出图像的类型,如果为负数,则与原图像类型相同。
- `alpha`:可选的放大倍率,对应于线性变换中的`a`。
- `beta`:可选的偏移量,对应于线性变换中的`b`。函数内部使用`saturate_cast<>`来防止溢出。
在给定的代码示例中,`linearTrans`函数实现了自定义的线性变换,其效果与`convertTo`函数相同。`convertTo`函数在`main`函数中被调用,参数设置为`-1`(保持原有类型)、`1.5`(放大因子)和`30`(偏移量),这将增加图像的对比度并提升亮度。
非线性强度变换包括对数变换和伽玛变换,它们在处理图像时能提供更精细的控制。对数变换(`x' = c*log(1 + x)`)常用于增强图像的暗部细节,适用于频谱分析等场景。伽玛变换(`x' = (x + esp)^r`)通过调整伽玛系数`r`,可以改变图像的亮部和暗部相对亮度,常用于调整图像的感知对比度。
OpenCV的`convertTo`函数和相关的非线性变换技术是图像处理中不可或缺的部分,它们能够根据需求调整图像的视觉特性,从而优化显示效果或者提取更多细节。无论是在基础的图像增强,还是在复杂的计算机视觉算法中,这些变换都扮演着重要角色。