编写opencv程序,选择一张照片,分别转换成图像整体变亮和图像整体变暗。然后对这三张图片进行直方图处理,并对它们进行直方图均衡化处理,仔细观察均衡化前后的变化。使用matplotlib.pyplot让所有图像都在同一个画布显示
时间: 2024-10-08 10:27:03 浏览: 60
基于Python和OpenCV实现对多张图片进行全景图像拼接消除鬼影+消除裂缝项目源码+文档说明(高分项目)
在OpenCV中,你可以通过以下几个步骤来完成这个任务:
1. **加载图像**:
首先,你需要从硬盘或其他来源加载一张图片,可以使用`cv2.imread()`函数。
```python
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('your_image.jpg')
```
2. **调整亮度**:
对于变亮和变暗,你可以直接操作图像矩阵,通过加减常数实现。例如,`cv2.addWeighted()`函数可以方便地调整亮度。
```python
bright_img = cv2.addWeighted(img, 1.5, 0, 0, 0) # 变亮
dark_img = cv2.addWeighted(img, 0.5, 0, 0, 0) # 变暗
```
这里,1.5是亮度增加的比例,0.5则是减少比例。
3. **直方图和直方图均衡化**:
使用`cv2.calcHist()`计算原图、明亮图和暗淡图的直方图,然后使用`cv2.equalizeHist()`对图片进行直方图均衡化。
```python
hist_bright, _ = cv2.calcHist([bright_img], [0], None, [256], [0, 255])
hist_dark, _ = cv2.calcHist([dark_img], [0], None, [256], [0, 255])
bright_eq = cv2.equalizeHist(bright_img)
dark_eq = cv2.equalizeHist(dark_img)
```
4. **绘制比较**:
使用`plt.imshow()`展示原始图片及其处理后的结果,并用`plt.hist()`绘制直方图对比。
```python
fig, axs = plt.subplots(nrows=2, ncols=3, figsize=(15, 10))
axs[0][0].imshow(img)
axs[0][0].set_title('Original Image')
axs[0][1].imshow(bright_img, cmap='gray')
axs[0][1].set_title('Brightened Image')
axs[0][1].hist(hist_bright, bins=256, color='r', alpha=0.5)
axs[0][2].imshow(dark_img, cmap='gray')
axs[0][2].set_title('Darkened Image')
axs[0][2].hist(hist_dark, bins=256, color='g', alpha=0.5)
axs[1][0].imshow(bright_eq, cmap='gray')
axs[1][0].set_title('Brightened Eq.')
axs[1][0].hist(bright_eq.ravel(), bins=256, color='m', alpha=0.5)
axs[1][1].imshow(dark_eq, cmap='gray')
axs[1][1].set_title('Darkened Eq.')
axs[1][1].hist(dark_eq.ravel(), bins=256, color='y', alpha=0.5)
for ax in axs.flat:
ax.set(xticks=[], yticks=[])
plt.tight_layout()
plt.show()
```
阅读全文