用python写一个用 直方图均衡化法实现对比度调节的程序
时间: 2023-08-30 19:04:07 浏览: 90
好的,以下是一个用直方图均衡化法实现对比度调节的Python程序:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg', 0)
# 直方图均衡化
equ = cv2.equalizeHist(img)
# 显示原图和处理后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Equalized Image', equ)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
解释一下上面的代码:
首先,我们使用`cv2.imread()`函数读取一张灰度图像,并将其赋值给变量`img`。
然后,我们使用`cv2.equalizeHist()`函数对图像进行直方图均衡化处理,并将处理后的图像保存到变量`equ`中。
最后,我们使用`cv2.imshow()`函数展示原始图像和均衡化后的图像,并使用`cv2.waitKey()`等待用户按下任意键,最后使用`cv2.destroyAllWindows()`关闭所有的窗口。
注意:如果你要尝试这个程序,需要将`image.jpg`替换成你自己的图片路径。
相关问题
python 直方图均衡化_直方图均衡化-Python实现
直方图均衡化是一种常见的图像增强方法,可以通过扩展图像的动态范围来增强图像的对比度。在Python中,可以使用OpenCV库实现直方图均衡化。
下面是实现直方图均衡化的代码示例:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg', 0)
# 进行直方图均衡化
equ = cv2.equalizeHist(img)
# 显示原始图像和均衡化后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Equalized Image', equ)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先使用`cv2.imread()`函数读取图像,然后使用`cv2.equalizeHist()`函数对图像进行直方图均衡化。最后,使用`cv2.imshow()`函数显示原始图像和均衡化后的图像,并使用`cv2.waitKey()`函数等待用户按下任意按键,最后使用`cv2.destroyAllWindows()`函数关闭所有窗口。
需要注意的是,直方图均衡化通常只适用于灰度图像,如果要对彩色图像进行直方图均衡化,需要将图像从RGB空间转换到HSV空间,并对亮度通道进行直方图均衡化,然后再将图像转换回RGB空间。
用python写程序实现上页直方图均衡化处理,不能套用现成的直方图均衡化函数,需自已编写。
在Python中,直方图均衡化是一种图像增强技术,通过改变像素值分布来提高图像对比度。下面是一个简单的步骤,我们将手动实现这个过程:
1. **读取图像**:
首先,我们需要使用PIL库来读取图像文件,如`from PIL import Image`。
```python
import cv2
from PIL import Image
# 加载图像
image = Image.open('input_image.jpg')
```
2. **灰度转换**:
如果图像不是灰度图像,需要将其转换为灰度,因为直方图均衡化针对单通道图像。
```python
if image.mode != 'L':
image = image.convert('L')
```
3. **计算直方图**:
我们遍历图像的每个像素值,并统计其出现的频率,形成直方图。
```python
histogram, bins = np.histogram(image.flatten(), 256, [0, 256])
```
4. **累积分布函数(CDF)**:
计算累计概率,这是为了将新的像素值映射到新的范围。
```python
cdf = histogram.cumsum()
cdf_normalized = cdf * hist.max() / cdf.max()
```
5. **变换像素**:
对于原图像的每个像素,找到对应的累积分布函数值,然后查表得到新的像素值。
```python
# 创建等距的新像素值数组
equivalent_gray = np.interp(image.flatten(), bins[:-1], cdf_normalized).reshape(image.size)
```
6. **保存结果**:
最后,我们将处理后的图像保存。
```python
equi_image = Image.fromarray(equivalent_gray, mode='L')
equi_image.save('output_equi_image.jpg')
```
阅读全文