我要用Python在pycharm2023中编码,要求它能实现以下功能:实现图像灰度值反转实验,用程序实验空间分辨率变化效果:读入一副RGB图像,变换成灰度图像,保证灰度级不变,将图像采样间隔分别设置为2i(i=0,1…7).并在同一窗口内分成2行4列共8个子窗口分别显示,注上文字标题;采用图像幂次变换实现灰度变换增强图像:对一幅图像进行灰度变换,实现图像变亮、变暗效果;实现直方图均衡化,并比较前后两幅图片的灰度直方图。求完整代码。
时间: 2024-03-06 18:50:13 浏览: 76
以下是实现上述功能的完整代码,注释中有详细说明:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 实现图像灰度值反转
def inverse_transform(img):
img_inverse = 255 - img
return img_inverse
# 实现空间分辨率变化
def spatial_resolution_transform(img):
img_list = [img]
for i in range(1, 8):
img_resize = cv2.resize(img, (0, 0), fx=2**i, fy=2**i, interpolation=cv2.INTER_LINEAR)
img_list.append(img_resize)
return img_list
# 实现图像幂次变换增强
def power_transform(img, gamma):
img_power = np.power(img/255, gamma)
img_power = np.uint8(img_power*255)
return img_power
# 实现直方图均衡化
def histogram_equalization(img):
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_eq = cv2.equalizeHist(img_gray)
return img_eq
# 读入图像
img = cv2.imread('test.jpg')
# 实现图像灰度值反转
img_inverse = inverse_transform(img)
plt.subplot(241), plt.imshow(cv2.cvtColor(img_inverse, cv2.COLOR_BGR2RGB)), plt.title('Inverse')
# 实现空间分辨率变化
img_list = spatial_resolution_transform(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
for i in range(7):
plt.subplot(2, 4, i+2), plt.imshow(img_list[i]), plt.title('2^{}'.format(i))
# 实现图像幂次变换增强
img_power1 = power_transform(img, 0.5)
img_power2 = power_transform(img, 2)
plt.subplot(247), plt.imshow(cv2.cvtColor(img_power1, cv2.COLOR_BGR2RGB)), plt.title('Gamma=0.5')
plt.subplot(248), plt.imshow(cv2.cvtColor(img_power2, cv2.COLOR_BGR2RGB)), plt.title('Gamma=2')
# 实现直方图均衡化
img_eq = histogram_equalization(img)
plt.subplot(245), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original')
plt.subplot(246), plt.imshow(cv2.cvtColor(img_eq, cv2.COLOR_GRAY2RGB)), plt.title('Equalization')
plt.show()
```
请将代码保存为 Python 文件,注意将 `test.jpg` 文件放在与代码文件相同的目录下,并且安装 `opencv-python` 库和 `matplotlib` 库。运行代码后,会在窗口中显示处理后的图像。
阅读全文