opencv中使用一個視窗顯示多張影像,可以采用拼接的方式:將要顯示的影像們拼接到一張大圖上,在python中可以很方便實作,
python代碼如下:
注意輸入的imglist中影像尺寸要一致,通道數可以不一致,都會轉換成BGR格式
import cv2
import numpy as np
import os
from copy import copy
def cv2showimgs(scale, imglist, order):
"""
:param scale: float 原圖縮放的尺度
:param imglist: list 待顯示的影像序列
:param order: list or tuble 顯示順序 行×列
:return: 回傳拼接好的numpy陣列
"""
allimgs = imglist.copy()
for i, img in enumerate(allimgs):
if np.ndim(img) == 2:
allimgs[i] = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
allimgs[i] = cv2.resize(img, dsize=(0, 0), fx=scale, fy=scale)
w, h = allimgs[0].shape[1], allimgs[0].shape[0]
# 將待顯示圖片拼接起來
if order[0] * order[1] == len(imglist):
imgblank = np.zeros((h * order[0], w * order[1], 3), np.uint8)
for i in range(order[0]):
for j in range(order[1]):
imgblank[i * h:(i + 1) * h, j * w:(j + 1) * w, :] = allimgs[i * order[1] + j]
return imgblank
else:
print('Error: wrong order!')
return None
函式測驗
root = "**圖片根目錄**"
os.chdir(root)
imgfiles = os.listdir(root)
imgs = []
for i in range(4):
img = cv2.imread(imgfiles[i], 1)
imgs.append(img)
show = cv2showimgs(scale=0.6, imglist=imgs, order=(2,2))
# cv2.namedWindow('1', flags=cv2.WINDOW_NORMAL)
cv2.imshow('1', show)
cv2.waitKey(0)
2×2、1×4顯示的結果圖如下:


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317716.html
標籤:其他
