cv2.imshow子图
时间: 2025-01-06 16:24:22 浏览: 2
### 使用 `cv2.imshow` 显示多个子图
在 OpenCV 中,`cv2.imshow` 函数用于显示单个窗口中的图像。然而,该函数并不支持直接创建多子图布局。为了实现这一目标,可以采用两种主要方法:
#### 方法一:使用多个独立窗口
通过调用多次 `cv2.imshow` 来分别展示不同图像,每个图像对应一个单独的窗口。
```python
import cv2
# 读取并处理图像
origineImage = cv2.imread('./pic/6.jpeg')
gray_image = cv2.cvtColor(origineImage, cv2.COLOR_BGR2GRAY)
# 创建两个不同的窗口来显示原图和灰度图
cv2.namedWindow('Original Image', cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('Gray Image', cv2.WINDOW_AUTOSIZE)
# 显示图像
cv2.imshow('Original Image', origineImage)
cv2.imshow('Gray Image', gray_image)
# 等待按键事件关闭所有打开的窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这种方法简单易行,但是管理多个窗口可能不太方便[^1]。
#### 方法二:利用第三方库 Matplotlib 实现更灵活的绘图功能
Matplotlib 提供了更加丰富的图形绘制能力,允许在一个画布上布置多个子图区域。对于希望在同一界面内比较多种图像的情况尤为适用。
```python
from matplotlib import pyplot as plt
import cv2
def show_images(images_titles):
"""Display multiple images with titles."""
n = len(images_titles)
fig = plt.figure(figsize=(8, 6))
for i in range(n):
ax = fig.add_subplot(1, n, i + 1)
title, image_path = images_titles[i]
# Read and convert color space if necessary
img_bgr = cv2.imread(image_path)
img_rgb = img_bgr[:, :, ::-1] # Convert BGR to RGB
ax.set_title(title)
ax.axis("off")
ax.imshow(img_rgb)
plt.show()
images_and_titles = [
('Original Image', './pic/6.jpeg'),
('Grayscale Image', './pic/gray.jpg')
]
show_images(images_and_titles)
```
此代码片段展示了如何借助 Matplotlib 的 subplot 功能,在同一张图表里排列两张或多张图片,并附带相应的标题说明[^3]。
阅读全文