python opencv将多个图放在一个窗口

编程需求:使用python+opencv对图像进行处理,把两张图放在一起显示

方法:使用numpy模块中的水平堆叠竖直堆叠完成所有图像的堆叠,最后当成一整张图显示。

注意:把不同的尺寸(宽和高)的图片或不同的颜色通道在一起来展示,会发生黑屏,所以要么把两张图的高度设置相同,要么宽度相同。这样才能正常显示。

举个栗子:

1.只设置两张图的高相同,拼接两图,显示;只设置两张图的宽相同,拼接两图,显示。

import cv2
import numpy as np
#读图1和图2
img1 = cv2.imread(r"C:\Users\thorne\PycharmProjects\biyesheji\image\3.jpg")
img2 = cv2.imread(r"C:\Users\thorne\PycharmProjects\biyesheji\image\1.jpeg")
#重新设置图1的宽和高
img1 = cv2.resize(img1, (400, 400))
#设置图2的高为400,与图1相同,宽自己任意设置,我这里设置为200
img2 = cv2.resize(img2, (200, 400))
#设置图2的宽为300,与图1相同,高自己任意设置,我这里设置为200
img3 = cv2.resize(img2, (400, 200))
# 高度相同的图像,横向水平拼接图
imgStackH = np.hstack((img1, img2))
# 宽度相同的图像,垂直水平拼接图
imgStackV = np.vstack((img1, img3))
# 在窗口显示图像 imgStackH 横向水平拼接图
cv2.imshow("DemoStackH", imgStackH)
# 在窗口显示图像 imgStackV垂直水平拼接图
cv2.imshow("DemoStackV", imgStackV)
key = cv2.waitKey(0)  # 等待按键命令

运行结果:宽度相同时拼接

 高度相同时拼接

 从上面结果可以看出,虽然两张图拼接到了一起,但是各自的比例完全不对,所以在使用这个方法的时候要知道:这个方法只适用于两张图片/多张图片 宽高比例相同或者相似的情况。

原本这两张图的比例是相似的,但是为了理解,上面的例子我把图1的比例改了。


下面展示两张比例相似的图拼接的结果:(只拼接高度相同的情况,宽度相同的情况与这个类似,就不写了)

附代码: 

import cv2
import numpy as np
#读图
img1 = cv2.imread(r"C:\Users\thorne\PycharmProjects\biyesheji\image\3.jpg")
img2 = cv2.imread(r"C:\Users\thorne\PycharmProjects\biyesheji\image\1.jpeg")
#1.设置两个图的高相同,然后拼接
#打印了解图1的高:634 和宽:400 (shape方法第一个参数是 高)
print(img1.shape)
#打印了解图2的宽和高:(1000, 667)
print(img2.shape)
#设置图2的高为:634 resize设置宽和高的第二个参数是 高,图2的宽自定义,这里我设置的400
img2 = cv2.resize(img2, (400, 634))
# 高度相同图像可以横向水平拼接
imgStackH = np.hstack((img1, img2))
# 在窗口显示横向拼接图像 imgStackH
cv2.imshow("DemoStackH", imgStackH)
key = cv2.waitKey(0)  # 等待按键命令

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中使用OpenCV进行垂直拼接相对简单,可以使用`cv2.vconcat()`函数实现。 该函数可以接受多个像作为输入,并将它们垂直拼接在一起。 首先,我们需要导入OpenCV库和NumPy库,并读取待拼接的像。以两个像为例。 ```python import cv2 import numpy as np # 读取待拼接的像 image1 = cv2.imread('image1.jpg') image2 = cv2.imread('image2.jpg') ``` 然后,使用`cv2.vconcat()`函数进行垂直拼接。将待拼接的像作为参数传递给函数。 ```python # 垂直拼接像 result = cv2.vconcat([image1, image2]) ``` 最后,可以将结果保存到一个新的像文件中。 ```python # 保存结果 cv2.imwrite('result.jpg', result) ``` 完整的代码如下: ```python import cv2 import numpy as np # 读取待拼接的像 image1 = cv2.imread('image1.jpg') image2 = cv2.imread('image2.jpg') # 垂直拼接像 result = cv2.vconcat([image1, image2]) # 保存结果 cv2.imwrite('result.jpg', result) ``` 上述代码将会把两个像垂直拼接在一起,并将结果保存到一个名为"result.jpg"的新像文件中。请确保在运行代码前将对应的像文件替换为实际的文件名。 ### 回答2: 要实现Python OpenCV的垂直拼接,可以按照以下步骤进行操作: 1. 导入所需的库和模块,包括OpenCV库和NumPy模块。可以使用命令`import cv2`和`import numpy as np`实现。 2. 使用OpenCV库提供的`cv2.imread()`函数加载要拼接的像,将其保存为变量。可以根据需要进行重复这一步骤,加载多张像。 3. 创建一个列表,将加载的像添加到列表中。可以使用类似`image_list.append(image)`的语法。 4. 使用NumPy模块提供的`np.vstack()`函数,将像列表垂直拼接成一个大的像。`np.vstack()`函数的参数是一个包含像列表的元组,返回值是一个垂直拼接的像。 5. 可以使用OpenCV库提供的`cv2.imshow()`函数显示拼接后的像。使用`cv2.waitKey()`函数等待键盘输入,然后使用`cv2.destroyAllWindows()`函数关闭窗口。 下面是一个示例代码,用于演示Python OpenCV的垂直拼接: ```python import cv2 import numpy as np # 加载要拼接的像 image1 = cv2.imread('image1.png') image2 = cv2.imread('image2.png') # 创建一个像列表 image_list = [] image_list.append(image1) image_list.append(image2) # 垂直拼接像 vertical_concatenated_image = np.vstack(tuple(image_list)) # 显示拼接后的像 cv2.imshow('Vertical Concatenated Image', vertical_concatenated_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码假设已经存在两张名为'image1.png'和'image2.png'的像,将它们垂直拼接并显示出来。根据需要,可以加载更多的像进行垂直拼接。 ### 回答3: 在Python中使用OpenCV进行垂直拼接可以通过以下步骤实现。 1. 导入必要的库和模块: ```python import cv2 import numpy as np ``` 2. 读取需要拼接的像: ```python img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') ``` 3. 确保两张像具有相同的宽度,即它们的列数相等: ```python height, width, _ = img1.shape img2 = cv2.resize(img2, (width, height)) ``` 4. 使用`vconcat()`函数进行垂直拼接: ```python result = cv2.vconcat([img1, img2]) ``` 5. 保存拼接后的像: ```python cv2.imwrite('result.jpg', result) ``` 完整的代码如下: ```python import cv2 import numpy as np img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') height, width, _ = img1.shape img2 = cv2.resize(img2, (width, height)) result = cv2.vconcat([img1, img2]) cv2.imwrite('result.jpg', result) ``` 注意,上述代码中的`image1.jpg`和`image2.jpg`是需要拼接的两张像的文件路径,可以根据实际情况修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值