1. 程式人生 > 實用技巧 >opencv將任意不同大小、不同通道圖片展示在同一視窗

opencv將任意不同大小、不同通道圖片展示在同一視窗

效果如圖:

程式碼:

def ManyImgs(scale, imgarray):
    rows = len(imgarray)         # 元組或者列表的長度
    cols = len(imgarray[0])      # 如果imgarray是列表,返回列表裡第一幅影象的通道數,如果是元組,返回元組裡包含的第一個列表的長度
    # print("rows=", rows, "cols=", cols)

    # 判斷imgarray[0]的型別是否是list
    # 是list,表明imgarray是一個元組,需要垂直顯示
    rowsAvailable = isinstance(imgarray[0], list)

    
# 第一張圖片的寬高 width = imgarray[0][0].shape[1] height = imgarray[0][0].shape[0] # print("width=", width, "height=", height) # 如果傳入的是一個元組 if rowsAvailable: for x in range(0, rows): for y in range(0, cols): # 遍歷元組,如果是第一幅影象,不做變換 if imgarray[x][y].shape[:2] == imgarray[0][0].shape[:2]: imgarray[x][y]
= cv2.resize(imgarray[x][y], (0, 0), None, scale, scale) # 將其他矩陣變換為與第一幅影象相同大小,縮放比例為scale else: imgarray[x][y] = cv2.resize(imgarray[x][y], (imgarray[0][0].shape[1], imgarray[0][0].shape[0]), None, scale, scale) # 如果影象是灰度圖,將其轉換成彩色顯示 if
len(imgarray[x][y].shape) == 2: imgarray[x][y] = cv2.cvtColor(imgarray[x][y], cv2.COLOR_GRAY2BGR) # 建立一個空白畫布,與第一張圖片大小相同 imgBlank = np.zeros((height, width, 3), np.uint8) hor = [imgBlank] * rows # 與第一張圖片大小相同,與元組包含列表數相同的水平空白影象 for x in range(0, rows): # 將元組裡第x個列表水平排列 hor[x] = np.hstack(imgarray[x]) ver = np.vstack(hor) # 將不同列表垂直拼接 # 如果傳入的是一個列表 else: # 變換操作,與前面相同 for x in range(0, rows): if imgarray[x].shape[:2] == imgarray[0].shape[:2]: imgarray[x] = cv2.resize(imgarray[x], (0, 0), None, scale, scale) else: imgarray[x] = cv2.resize(imgarray[x], (imgarray[0].shape[1], imgarray[0].shape[0]), None, scale, scale) if len(imgarray[x].shape) == 2: imgarray[x] = cv2.cvtColor(imgarray[x], cv2.COLOR_GRAY2BGR) # 將列表水平排列 hor = np.hstack(imgarray) ver = hor return ver img1=cv2.imread("F:/google/qc.jpg") img2=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY) imgs=ManyImgs(1,([img1,img2],[img2,img2])) cv2.imshow("1",imgs) cv2.waitKey(0)