编程实现图像的全局线性变换及gamma变换,并进行展示对比,要求不使用OpenCV库。图像名为"NL.png"
时间: 2024-11-24 16:43:45 浏览: 25
如果你不想使用OpenCV库来实现图像的全局线性变换和gamma变换,可以使用纯Python或者其他图像处理库,比如PIL(Python Imaging Library)。由于OpenCV不是标准库,下面的示例将使用PIL作为例子,不过请注意,这可能会失去一些OpenCV提供的高级图像处理功能。
首先,让我们创建一个简单的全局线性变换函数(这里仅演示缩放):
```python
from PIL import Image
def apply_linear_transform(image_path, scale_percent=(100, 100)):
with Image.open(image_path) as im:
width, height = im.size
new_width = int(width * scale_percent[0] / 100)
new_height = int(height * scale_percent[1] / 100)
resized_im = im.resize((new_width, new_height))
return resized_im
linear_transformed_image = apply_linear_transform('NL.png')
linear_transformed_image.show()
```
接着,我们将使用matplotlib库来模拟gamma变换,因为Python内建的`np.power`函数可以实现非线性映射:
```python
import matplotlib.pyplot as plt
import numpy as np
def gamma_correction(image, gamma=1.0):
linear_scaled = image.convert('L') # 将RGB转换为灰度
linear_scaled_array = np.array(linear_scaled)
corrected_array = np.power(linear_scaled_array / 255, 1/gamma) * 255
return Image.fromarray(corrected_array.astype(np.uint8))
gamma_corrected_image = gamma_correction(linear_transformed_image)
gamma_corrected_image.show()
```
这两个函数分别生成了缩放和平滑伽马变换的效果。为了展示原始图片、调整后的图片和它们各自的变化,你可以手动记录每个步骤的结果,或者用其他可视化工具。
请注意,上述代码没有直接提供直方图显示,如果需要这部分功能,你可能需要引入额外的库,如matplotlib的hist模块或seaborn等。
阅读全文