1. 编程实现图像的全局线性变换及gamma变换,并进行展示对比。 2. 编程实现图像的直方图均衡化处理,最终显示要将原图、处理后的图及这二者对应的直方图进行显示。——可调用cv2.equalizeHist() 假设现有一名为“diamond”的图像,将其用于实验
时间: 2024-11-26 20:22:07 浏览: 14
在Python中,我们可以使用OpenCV(cv2)库来进行图像的全局线性变换(如透视变换或仿射变换)以及gamma变换。这里我将以钻石图像("diamond")为例来说明。
1. **图像全局线性变换**:
```python
import cv2
import numpy as np
# 加载图像
img = cv2.imread('diamond.jpg', cv2.IMREAD_GRAYSCALE)
# 定义变换矩阵(例如仿射变换)
transform_matrix = np.array([[1, 0, 50], [0, 1, 75]], dtype=np.float32) # 左上角平移(50, 75)
# 应用变换
warped_img = cv2.warpAffine(img, transform_matrix, img.shape)
cv2.imshow("Original Image", img)
cv2.imshow("Transformed Image", warped_img)
```
为了方便展示,记得保存两个窗口并等待用户关闭。
2. **Gamma变换**:
```python
def gamma_correction(image, gamma=1.0):
invGamma = 1.0 / gamma
table = np.array([((i / 255.0) ** invGamma) * 255 for i in np.arange(0, 256)]).astype("uint8")
return cv2.LUT(image, table)
gamma_img = gamma_correction(warped_img)
cv2.imshow("Gamma Corrected Image", gamma_img)
```
同样,你需要创建一个新的窗口来显示伽马校正后的图像。
**直方图均衡化**:
```python
# 直方图均衡化
histeq_img = cv2.equalizeHist(img)
cv2.imshow("Histogram Equalized Image", histeq_img)
# 计算并显示原始图像和直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
cv2.imshow("Original Histogram", cv2.applyColorMap(hist.astype(np.uint8), cv2.COLORMAP_JET))
cv2.imshow("Equalized Histogram", cv2.applyColorMap(cv2.calcHist([img], [0], None, [256], [0, 256]).astype(np.uint8), cv2.COLORMAP_JET))
cv2.waitKey(0) # 等待用户按键
cv2.destroyAllWindows() # 关闭所有窗口
```
在这个示例中,我们展示了原始图像、经过直方图均衡化的图像以及它们各自的直方图。
阅读全文