matplotlib怎么让图像更暗
时间: 2023-10-14 11:08:59 浏览: 124
可以通过调整图像的亮度来使其变暗。使用matplotlib中的`imshow()`函数,并通过设置`vmin`和`vmax`参数来限制图像的亮度范围。下面是一个简单的例子,将图像变暗50%:
```python
import matplotlib.pyplot as plt
import numpy as np
# 载入一张图片
img = plt.imread('example.jpg')
# 设置亮度范围
vmin, vmax = np.percentile(img, (25, 75))
# 调整图像亮度
img_dark = np.clip((img - vmin) / (vmax - vmin) * 0.5, 0, 1)
# 显示原始图像与调整后的图像
fig, ax = plt.subplots(1, 2)
ax[0].imshow(img)
ax[0].set_title('Original')
ax[1].imshow(img_dark)
ax[1].set_title('Dark')
plt.show()
```
在上面的代码中,`np.percentile()`函数被用来计算图像的亮度范围。然后,通过将像素值归一化到0到1之间,并将亮度范围缩小到25%到75%之间,得到了一个更暗的图像。最后,使用`np.clip()`函数将亮度范围限制在0到1之间,以防止像素值超出范围。
相关问题
编写opencv程序,选择一张照片,分别转换成图像整体变亮和图像整体变暗。然后对这三张图片进行直方图处理,并对它们进行直方图均衡化处理,仔细观察均衡化前后的变化。使用matplotlib.pyplot让所有图像都在同一个画布显示
在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()
```
编写一段opencv程序,选择一张照片,分别转换成图像整体变亮和图像整体变暗。然后对这三张图片进行直方图处理,并对它们进行直方图均衡化处理,仔细观察均衡化前后的变化。使用matplotlib.pyplot让所有图像都在同一个画布显示
在Python中,我们可以使用OpenCV库读取照片,调整亮度,处理直方图并进行直方图均衡化。以下是实现这个任务的一个简单示例:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 1. 读取图片
img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 假设是灰度图像,如果是彩色,可以去掉IMREAD_GRAYSCALE
# 2. 图像整体变亮
bright_img = cv2.convertScaleAbs(img, alpha=1.5, beta=0)
# 图像整体变暗
dark_img = cv2.convertScaleAbs(img, alpha=0.8, beta=0)
# 3. 直方图
hist_bright, _ = np.histogram(bright_img.flatten(), bins='auto')
hist_dark, _ = np.histogram(dark_img.flatten(), bins='auto')
# 4. 直方图均衡化
eq_bright = cv2.equalizeHist(bright_img)
eq_dark = cv2.equalizeHist(dark_img)
# 5. 可视化
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(10, 10))
axs[0, 0].imshow(img, cmap='gray')
axs[0, 0].set_title('Original Image')
axs[0, 1].imshow(bright_img, cmap='gray')
axs[0, 1].set_title('Brightened Image')
axs[1, 0].imshow(dark_img, cmap='gray')
axs[1, 0].set_title('Darkened Image')
axs[1, 1].imshow(eq_bright, cmap='gray')
axs[1, 1].set_title('Brightened Image (Equalized)')
axs[1, 1].imshow(eq_dark, cmap='gray')
axs[1, 1].set_title('Darkened Image (Equalized)')
for ax in axs.flat:
ax.axis('off') # 关闭坐标轴
plt.tight_layout()
plt.show()
阅读全文