使用plt 将图像的h、s、v通道以直方图的形式显示出来及原图显示出来
时间: 2024-03-05 09:54:58 浏览: 71
好的,以下是代码实现:
```python
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 将图像转换为 HSV 空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 分离通道
h, s, v = cv2.split(hsv)
# 绘制直方图
plt.subplot(221)
plt.hist(h.ravel(), 256, [0, 256])
plt.title('H Channel Histogram')
plt.subplot(222)
plt.hist(s.ravel(), 256, [0, 256])
plt.title('S Channel Histogram')
plt.subplot(223)
plt.hist(v.ravel(), 256, [0, 256])
plt.title('V Channel Histogram')
# 显示原图
plt.subplot(224)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.show()
```
其中,`plt.hist()` 函数用于绘制直方图,`ravel()` 函数用于将通道转换为一维数组,最后使用 `plt.show()` 函数将图像显示出来。
相关问题
使用Jupyter提取原图hsv三通道中v通道的直方图,并进行直方图均衡化,展示直方图均衡化的结果
好的,我会尝试回答您的问题。
首先,您需要安装 `OpenCV` 和 `matplotlib` 库,可以使用以下命令进行安装:
```
!pip install opencv-python
!pip install matplotlib
```
接下来,您可以使用以下代码读取原图并提取 `v` 通道:
```python
import cv2
import matplotlib.pyplot as plt
# 读取原图
img = cv2.imread("your_image_path.jpg")
# 转换为 HSV 颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 提取 V 通道
v_channel = hsv[:, :, 2]
```
然后,您可以使用以下代码绘制 `v` 通道的直方图并进行直方图均衡化:
```python
# 绘制原始直方图
plt.hist(v_channel.flatten(), 256, [0, 256])
plt.xlim([0, 256])
plt.show()
# 进行直方图均衡化
v_channel_eq = cv2.equalizeHist(v_channel)
# 绘制均衡化后的直方图
plt.hist(v_channel_eq.flatten(), 256, [0, 256])
plt.xlim([0, 256])
plt.show()
```
最后,您可以使用以下代码展示直方图均衡化的结果:
```python
# 将均衡化后的 V 通道替换原图中的 V 通道
hsv[:, :, 2] = v_channel_eq
# 将 HSV 颜色空间转换回 BGR 颜色空间
result = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
# 展示结果
plt.imshow(result)
plt.show()
```
请注意,您需要将 `your_image_path.jpg` 替换为您自己的图像路径。
同时显示 lena.jpg 的原图、 直方图均衡化的图像、原图的灰度直方图和直方图均衡化后的灰度直方图代码
在Python中,我们可以使用OpenCV库来处理图片,包括读取原图、进行直方图均衡化以及展示图像。以下是基本步骤:
首先,你需要安装OpenCV库(可以使用pip install opencv-python),然后按照以下代码操作:
1. **读取lena.jpg原图**:
```python
import cv2
img = cv2.imread('lena.jpg')
```
2. **计算并显示原图**:
```python
cv2.imshow("Original Image", img)
cv2.waitKey(0) # 等待用户按键
cv2.destroyAllWindows()
```
3. **将图像转换为灰度**:
```python
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
4. **计算灰度图像的直方图**:
```python
hist = cv2.calcHist([gray_img], [0], None, [256], [0, 256])
```
注意这里`[0]`表示我们只关心灰度通道,`[256]`是直方图的大小,代表灰度值范围。
5. **绘制并显示原图灰度直方图**:
```python
plt.figure(figsize=(8, 4))
plt.plot(hist)
plt.title('Original Gray Histogram')
plt.xlabel('Gray Level')
plt.ylabel('Frequency')
plt.show()
```
这里使用了matplotlib库来绘制直方图,需要先导入`import matplotlib.pyplot as plt`。
6. **对图像进行直方图均衡化**:
```python
equalized_img = cv2.equalizeHist(gray_img)
```
7. **计算并显示直方图均衡化的图像**:
```python
cv2.imshow("Histogram Equalized Image", equalized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
8. **绘制直方图均衡化的灰度直方图**:
```python
hist_eq = cv2.calcHist([equalized_img], [0], None, [256], [0, 256])
plt.figure()
plt.plot(hist_eq, 'r', label='Equalized Histogram')
plt.legend()
plt.show()
```
以上就是整个流程。如果你运行这个代码,会看到原始图像、直方图均衡化后的图像,以及两个直方图的对比。
阅读全文