python将多幅图片显示在一张图片上

原来一直使用Matlab,已经习惯了Matlab强大的矩阵计算和方便的画图界面。最近刚开始学习python,期间出现了很多小问题,没关系,一点一点解决就好。
现在碰到的问题是如何将多幅图片显示在一张图片上。经过资料查找,找到两种解决方案。

  1. 第一种:利用 np.hstack、np.vstack实现一幅图像中显示多幅图片。代码为:
# -*- coding: utf-8 -*-
# 利用 np.hstack、np.vstack实现一幅图像中显示多幅图片
"""
created on Thursday June 14 17:05 2018
@author: Jerry

"""
import cv2
from pylab import *

img1 = cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
img2 = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
img3 = cv2.imread('lena.jpg',cv2.IMREAD_UNCHANGED)
img4 = cv2.imread('lena.jpg')

htitch= np.hstack((img1, img3,img4))
vtitch = np.vstack((img1, img3))
cv2.imshow("test1",htitch)
cv2.imshow("test2",vtitch)

cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
水平拼接
垂直拼接
但是这种方法只能实现n*1,和1*m的拼接,不能实现n*m的拼接。而且灰度图像和三维图像是 不能在一张图像上进行拼接的。
2. 利用matplotlib库,这种方法是最像Matlab,用起来最方便,图片排版更清晰。由于opencv的初创者使用的是BGR模式,而现在一般使用的是RGB模式,所以需要将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像。代码为:

这里写代码片# -*- coding: utf-8 -*-
# 利用 matplotlib实现一幅图像中显示多幅图片
"""
created on Thursday June 14 17:05 2018
@author: Jerry

"""
import cv2
from pylab import *

img1 = cv2.imread('lena.jpg',cv2.IMREAD_COLOR)
img2 = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
img3 = cv2.imread('lena.jpg',cv2.IMREAD_UNCHANGED)
img4 = cv2.imread('lena.jpg')

# 将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv的图像

img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.cvtColor(img2, cv2.COLOR_GRAY2RGB)
img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2RGB)
img4 = cv2.cvtColor(img4, cv2.COLOR_BGR2RGB)

fig = plt.figure()
subplot(221)
imshow(img1)
title('img1')
axis('off')
subplot(222)
imshow(img2)
title('img2')
axis('off')
subplot(223)
imshow(img3)
title('img3')
axis('off')
subplot(224)
imshow(img4)
title('img4')
axis('off')
show()

这里写图片描述
结果可以看出,这种方法更好,更能满足需求。
本人是新手,代码比较繁琐。博主saltriver写的为什么matplotlib显示opencv图像不正常代码更简洁,思路更清晰,是我需要学习的方向。

猜你喜欢

转载自blog.csdn.net/wugui1111/article/details/80706411