opencv实现图像的灰度变换,包括图像变暗,变亮,降低对比度和直方图均衡化,并画出每个操作的结果图像,直方图
时间: 2024-10-27 19:10:11 浏览: 188
在OpenCV中,实现图像的灰度变换、调整亮度和对比度以及直方图均衡化,通常需要以下几个步骤:
1. **图像转灰度**:
- 使用`cv2.cvtColor`函数将彩色图像转换为灰度图像,例如:
```python
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
```
2. **图像变暗/变亮**:
- 可通过调整像素值实现变暗或变亮,如减去固定值或乘以一个小于1的系数(变暗),加一定数值或乘以大于1的系数(变亮)。这里是一个例子:
```python
alpha = 0.5 # 调整因子
darker_gray = cv2.addWeighted(gray_image, alpha, gray_image, 1 - alpha, gamma=-1) # -1会使图像变暗
brighter_gray = cv2.addWeighted(gray_image, alpha, gray_image, 1 - alpha, gamma=1) # 1会使图像变亮
```
其中`gamma`用于控制暗化/亮化的强度。
3. **降低对比度**:
- 同样,可以使用`addWeighted`函数,将两个相似的灰度图像相加并减少其中一个的权重(对比度降低):
```python
low_contrast_gray = cv2.addWeighted(gray_image, 0.7, gray_image, 0.3, beta=0)
```
`beta`参数用于调整对比度。
4. **直方图均衡化**:
- 这是为了增强图像的对比度,提高细节可见度。OpenCV提供`cv2.equalizeHist`函数实现:
```python
eq_gray = cv2.equalizeHist(gray_image)
```
现在你可以分别保存这些处理后的图像:
```python
for img in [darker_gray, brighter_gray, low_contrast_gray, eq_gray]:
cv2.imwrite(f"output_{img_name}_{operation}.png", img)
```
5. **直方图**:
- 为了查看每一步的效果,可以计算并绘制直方图。`cv2.calcHist`可用于计算单通道图像的直方图,然后`cv2.imshow`显示:
```python
hist = cv2.calcHist([gray_image], [0], None, [256], [0, 256])
cv2.imshow("Original Histogram", hist)
cv2.waitKey(0)
```
对于处理后的图像,也需要类似地计算和展示直方图。
阅读全文