Python opencv实现图像指数变换并画出直方图
时间: 2024-04-30 17:24:17 浏览: 87
以下是Python opencv实现图像指数变换并画出直方图的示例代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
img = cv2.imread('lena.jpg', 0)
# 定义指数变换函数
def exp_transform(img, c, gamma):
return c * np.power(img, gamma)
# 常数c的选择
c = 1
for i in range(256):
if c * np.power(i, 1.5) > 255:
break
else:
c *= 1.5
# 进行指数变换
gamma = 1.5
img_exp = exp_transform(img, c, gamma).astype(np.uint8)
# 绘制直方图
hist_ori = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_exp = cv2.calcHist([img_exp], [0], None, [256], [0, 256])
plt.plot(hist_ori, color='b')
plt.plot(hist_exp, color='r')
plt.xlim([0, 256])
plt.legend(('Original', 'Exponential'), loc='upper left')
plt.show()
# 显示图像
cv2.imshow('Original', img)
cv2.imshow('Exponential', img_exp)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们首先读取了一张灰度图像,然后定义了一个指数变换函数exp_transform。为了保证映射后的像素值在[0,255]范围内,我们需要选择合适的常数c。在本例中,我们使用了一个循环来选择c。
接下来,我们使用exp_transform函数进行指数变换,其中gamma=1.5。最后,我们使用cv2.calcHist函数计算原始图像和变换后的图像的直方图,并使用matplotlib绘制直方图。
最后,我们显示原始图像和指数变换后的图像,并等待按下任意键退出程序。
阅读全文