python cv2.imshow同一窗口显示图片
时间: 2023-08-30 15:04:09 浏览: 384
要在同一窗口显示多个图片,可以使用cv2.imshow()和cv2.waitKey(),以及cv2.namedWindow()函数。
示例代码:
``` python
import cv2
# 创建窗口
cv2.namedWindow("Images", cv2.WINDOW_NORMAL)
# 读取图片
img1 = cv2.imread("image1.jpg")
img2 = cv2.imread("image2.jpg")
# 在同一窗口中显示图片
cv2.imshow("Images", img1)
cv2.waitKey(0)
cv2.imshow("Images", img2)
cv2.waitKey(0)
# 关闭窗口
cv2.destroyAllWindows()
```
在上面的代码中,我们首先使用cv2.namedWindow()函数创建一个名为“Images”的窗口。然后我们读取两张图片,img1和img2,使用cv2.imshow()函数将它们分别显示在同一窗口中。cv2.waitKey(0)函数等待用户按下任意键继续执行下一步操作。最后,我们使用cv2.destroyAllWindows()函数关闭窗口。
相关问题
cv2.imshow显示两张图片
在Python中使用OpenCV库的`cv2.imshow`函数可以显示多张图片,但需要注意的是,每次调用`cv2.imshow`只能显示一张图片,如果想要在同一窗口中显示多张图片,则需要在显示每张图片之前调用`cv2.resizeWindow`来调整窗口大小,或者使用`cv2.CascadeClassifier`、`cv2.HoughCircles`等函数分别处理和显示不同的图片内容。
具体来说,如果你想在一个窗口中并排显示两张图片,可以这样做:
1. 首先,使用`cv2.resizeWindow`来设置窗口的大小。
2. 然后,分别使用`cv2.imshow`函数显示每张图片。
下面是一个简单的示例代码:
```python
import cv2
# 读取两张图片
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# 设置窗口大小
cv2.namedWindow('Images', cv2.WINDOW_NORMAL)
cv2.resizeWindow('Images', image1.shape[1]+image2.shape[1], max(image1.shape[0], image2.shape[0]))
# 显示第一张图片
cv2.imshow('Images', image1)
cv2.waitKey(0) # 等待按键
# 移动窗口中的画布,为第二张图片腾出空间
cv2.moveWindow('Images', 0, 0)
# 显示第二张图片
cv2.imshow('Images', image2)
cv2.waitKey(0) # 等待按键
# 关闭显示窗口
cv2.destroyAllWindows()
```
cv2.imshow子图
### 使用 `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]。
阅读全文
相关推荐













