Python OpenCV一個(gè)窗口中顯示多幅圖像
在使用opencv顯示圖像時(shí),有時(shí)候需要顯示多張圖像,就會(huì)出現(xiàn)多個(gè)窗口,顯得冗余,用戶不好操作。這時(shí)候就想著能不能將這些圖像在一個(gè)窗口中顯示。
方法1:創(chuàng)建畫布,將所有圖像復(fù)制到畫布中,最后顯示畫布
# 方法1:創(chuàng)建一個(gè)畫布,將所有圖像復(fù)制到畫布中,最后顯示畫布 h, w, _ = img.shape img_list = [img, invert, gaussianBlur, flip] # 圖像列表 four_view = np.zeros((h * 2 + 10, w * 2 + 10, 3), np.uint8) # 創(chuàng)建空白圖像 four_view[:, :] = 255 # 給所有通道的像素值賦值255 for i in range(len(img_list)): row = i // 2 col = i % 2 print(row, col) # 將小圖像復(fù)制到大畫布上。 np.copyto(four_view[(h + 10) * row:h * (row + 1) + 10 * row, (w + 10) * col:w * (col + 1) + 10 * col], img_list[i]) cv.imshow('result', four_view)
方法2:使用numpy模塊中的水平堆疊和豎直堆疊完成所有圖像的堆疊,最后當(dāng)成一整張圖顯示。
主要用到的兩個(gè)函數(shù)有:np.hstack()
和np.vstack()
水平堆疊函數(shù)hstack(tup)
:ndarrays 序列除了第二個(gè)軸外,數(shù)組必須具有相同的形狀,除了可以是任意長(zhǎng)度的一維數(shù)組。豎直堆疊函數(shù)np.vstack()
:ndarrays 序列除了第一個(gè)軸外,數(shù)組必須具有相同的形狀。一維數(shù)組必須具有相同的長(zhǎng)度。
# 方法2:使用numpy的水平堆疊和豎直堆疊完成所有圖像的堆疊,最后一起顯示 vs1 = np.hstack((img, invert)) # 水平堆疊 vs2 = np.hstack((gaussianBlur, flip)) # 水平堆疊 result = np.vstack((vs1, vs2)) # 豎直堆疊
整個(gè)項(xiàng)目的完整代碼:
# -*-coding:utf-8-*- """ File Name: color_operation.py Program IDE: PyCharm Create File By Author: Hong """ import cv2 as cv import numpy as np def image_display(image_path: str): """ 多個(gè)圖像在一個(gè)窗口內(nèi)顯示 :param image_path: 傳入圖像路徑 :return: """ img = cv.imread(image_path, cv.IMREAD_COLOR) # 顏色取反 invert = cv.bitwise_not(img) # 高斯模糊 gaussianBlur = cv.GaussianBlur(img, (0, 0), 10) # 鏡像 flip = cv.flip(img, 1) # 0表示繞x軸翻轉(zhuǎn);1表示繞y軸翻轉(zhuǎn);-1表示繞兩個(gè)軸翻轉(zhuǎn) # 方法1:創(chuàng)建一個(gè)畫布,將所有圖像復(fù)制到畫布中,最后顯示畫布 h, w, _ = img.shape img_list = [img, invert, gaussianBlur, flip] four_view = np.zeros((h * 2 + 10, w * 2 + 10, 3), np.uint8) four_view[:, :] = 255 # 給所有通道的像素值賦值255 for i in range(len(img_list)): row = i // 2 col = i % 2 print(row, col) # 將小圖像復(fù)制到大畫布上。 np.copyto(four_view[(h + 10) * row:h * (row + 1) + 10 * row, (w + 10) * col:w * (col + 1) + 10 * col], img_list[i]) cv.imshow('result', four_view) # 方法2:使用numpy的水平堆疊和豎直堆疊完成所有圖像的堆疊,最后一起顯示 vs1 = np.hstack((img, invert)) # 水平堆疊 vs2 = np.hstack((gaussianBlur, flip)) # 水平堆疊 result = np.vstack((vs1, vs2)) # 豎直堆疊 # 初略解決imshow()中文亂碼顯示的問題。不能完全解決,有些中文無(wú)法顯示。這是python-opencv的弊端 def zh_ch(string): return string.encode('gbk').decode(errors='ignore') cv.imshow(zh_ch('圖片'), result) cv.waitKey(0) cv.destroyAllWindows() if __name__ == '__main__': path = 'images/daiyutong.png' image_display(path)
效果展示:
到此這篇關(guān)于Python OpenCV一個(gè)窗口中顯示多幅圖像的文章就介紹到這了,更多相關(guān)Python OpenCV圖像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)的掃碼工具居然這么好用!
二維碼作為一種信息傳遞的工具在當(dāng)今社會(huì)發(fā)揮了重要作用.從手機(jī)用戶登錄到手機(jī)支付,生活的各個(gè)角落都能看到二維碼的存在.那你知道二維碼是怎么解析的嗎?有想過自己實(shí)現(xiàn)一個(gè)掃碼工具嗎?如果想的話就繼續(xù)看下去吧!需要的朋友可以參考下2021-06-06跟老齊學(xué)Python之使用Python查詢更新數(shù)據(jù)庫(kù)
前面我們講述了使用python操作數(shù)據(jù)庫(kù),今天我們來(lái)更進(jìn)一步,介紹下python查詢、更新數(shù)據(jù)庫(kù)的相關(guān)操作。有需要的小伙伴自己參考下吧。2014-11-11Python操作MongoDB數(shù)據(jù)庫(kù)的方法示例
這篇文章主要介紹了Python操作MongoDB數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了Python命令行模式下操作MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)連接、查找、刪除、排序等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Python實(shí)現(xiàn)按當(dāng)前日期(年、月、日)創(chuàng)建多級(jí)目錄的方法
這篇文章主要介紹了Python 按當(dāng)前日期(年、月、日)創(chuàng)建多級(jí)目錄的方法,實(shí)現(xiàn)代碼很簡(jiǎn)單,需要的朋友可以參考下2018-04-04python中 chr unichr ord函數(shù)的實(shí)例詳解
這篇文章主要介紹了python中 chr unichr ord函數(shù)的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-08-08pycharm遠(yuǎn)程調(diào)試openstack代碼
這篇文章主要為大家詳細(xì)介紹了pycharm遠(yuǎn)程調(diào)試openstack的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11使用python 3實(shí)現(xiàn)發(fā)送郵件功能
本文通過實(shí)例代碼給大家介紹了使用python 3實(shí)現(xiàn)發(fā)送郵件功能,代碼簡(jiǎn)單易懂非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06