OpenCV 4基礎篇| OpenCV圖像的拼接

目錄

  • 1. Numpy (np.hstack,np.vstack)
    • 1.1 注意事項
    • 1.2 代碼示例
  • 2. matplotlib
    • 2.1 注意事項
    • 2.2 代碼示例
  • 3. 擴展示例:多張小圖合并成一張大圖
  • 4. 總結

1. Numpy (np.hstack,np.vstack)

語法結構:

retval = np.hstack(tup) # 水平拼接
retval = np.vstack(tup) # 垂直拼接
  • tup:一個包含多個數組的元組((img1, img2, …))。這些數組將被水平堆疊(即沿第二個軸拼接)。
  • retval:拼接后的圖像,nparray 多維數組

1.1 注意事項

  • np.hstack() 按水平方向(列順序)拼接 2個或多個圖像,圖像的高度(數組的行)必須相同。
  • np.vstack()按垂直方向(行順序)拼接 2個或多個圖像,圖像的寬度(數組的列)必須相同。
  • 綜合使用 np.hstack()np.vstack() 函數,可以實現圖像的矩陣拼接。
  • np.hstack()np.vstack() 只是簡單地將幾張圖像直接堆疊而連成一張圖像,并未對圖像進行特征提取和邊緣處理,因而并不能實現圖像的全景拼接。

1.2 代碼示例

import cv2
import numpy as npimg = cv2.imread("./img/lena.jpg")
img = cv2.resize(img, None, fx=0.5, fy=0.5)    #為了完整顯示,縮小一倍
blur2 = cv2.blur(img, (2,2))#模糊處理
blur3 = cv2.blur(img, (5,5))
blur4 = cv2.blur(img, (10,10))htich = np.hstack((img,blur2))
htich2 = np.hstack((blur3,blur4))
vtich = np.vstack((htich, htich2))cv2.imshow("mergedDemo", vtich)
cv2.waitKey(0)
cv2.destroyAllWindows()

1

2. matplotlib

2.1 注意事項

  • opencv使用的是BGR模式,而matplotlib使用的是RGB模式,所以需要將opencv中的BGR、GRAY格式轉換為RGB,使matplotlib中能正常顯示opencv的圖像。

2.2 代碼示例

import matplotlib.pyplot as plt
import cv2imgFile = "./img/lena.jpg"
img1 = cv2.imread(imgFile, cv2.IMREAD_COLOR)
img2 = cv2.imread(imgFile, cv2.IMREAD_GRAYSCALE)
img3 = cv2.imread(imgFile, cv2.IMREAD_UNCHANGED)
img4 = cv2.imread(imgFile)
# 將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)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文標簽
plt.subplot(221), plt.title("img1"), plt.axis('off')
plt.imshow(img1)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文標簽
plt.subplot(222), plt.title("img2"), plt.axis('off')
plt.imshow(img2)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文標簽
plt.subplot(223), plt.title("img3"), plt.axis('off')
plt.imshow(img3)
plt.rcParams['font.sans-serif'] = ['FangSong']  # 支持中文標簽
plt.subplot(224), plt.title("img4"), plt.axis('off')
plt.imshow(img4)
plt.show()

11

3. 擴展示例:多張小圖合并成一張大圖

import cv2  
import numpy as np  # 圖像文件路徑列表  
image_paths = ['1.jpg', '2.jpg', '3.jpg', '4.jpg']  # 假設這是你的分塊圖像列表  # 獲取第一個圖像的大小以確定整個大圖的大小  
first_image = cv2.imread(image_paths[0])  
height, width = first_image.shape[:2]  # 創建一個全黑的圖像作為背景,大小與整個大圖相同  
final_image = np.zeros((height, width, 3), dtype=np.uint8)  # 循環遍歷每個分塊圖像  
for image_path in image_paths:  chunk = cv2.imread(image_path)  # 提取分塊圖像的坐標  chunk_height, chunk_width = chunk.shape[:2]  start_i, start_j = image_path.split('_')[-2:]  start_i, start_j = int(start_i), int(start_j)  # 將分塊圖像寫入到最終圖像中  final_image[start_i:start_i+chunk_height, start_j:start_j+chunk_width] = chunk  # 釋放分塊圖像占用的內存  del chunk  # 保存最終合并的圖像  
cv2.imwrite('final_image.jpg', final_image)

4. 總結

  • np.hstacknp.vstack 用于拼接數組,而 matplotlib 用于顯示圖像。
  • NumPy 的拼接操作通常比 matplotlib 更快,因為 matplotlib 的主要目的不是圖像處理。
  • 可以先用 NumPy 進行圖像拼接,然后用 matplotlib 來顯示結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717368.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717368.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717368.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

工作日記:JavaScript fill() 方法

定義 fill() 方法用于將一個固定值替換數組的元素。 語法 array.fill(value, start, end) value:必填。要填充的值 start:可選。開始填充位置 end:可選。結束填充位置(默認是數組的長度:array.length)…

提取拼多多店鋪商家電話的爬蟲軟件

拼多多是中國知名的團購電商平臺,許多用戶在購物時都希望能夠直接聯系到店鋪商家,以便獲得更多的產品信息或解決問題。在這篇文章中,我們將介紹如何使用Python編寫一個爬蟲軟件,來提取拼多多店鋪商家電話。 首先,我們…

c++之通訊錄管理系統

1,系統需求 通訊錄是一個記錄親人,好友信息的工具 系統中需要實現的功能如下: 1,添加聯系人:向通訊錄中添加新人,信息包括(姓名,性別,年齡,聯系電話&#…

構建高效的接口自動化測試框架思路

在選擇接口測試自動化框架時,需要根據團隊的技術棧和項目需求來綜合考慮。對于測試團隊來說,使用Python相關的測試框架更為便捷。無論選擇哪種框架,重要的是確保 框架功能完備,易于維護和擴展,提高測試效率和準確性。今…

IntelliJ IDEA 的常用快捷鍵

IntelliJ IDEA 的常用快捷鍵非常多,這些快捷鍵可以幫助你更高效地編寫代碼。以下是一些常用的快捷鍵總結: 基礎操作 CtrlN:查找類CtrlShiftN:查找文件CtrlAltL:格式化代碼AltInsert:生成代碼(…

信息安全技術第1章——信息網絡安全基本概念

課程介紹 網絡信息安全是醫學信息工程專業的限選課。主要圍繞計算機網絡安全所涉及的主要問題進行講解,內容包括:對稱密碼與公鑰密碼的基本原理、相關算法及應用。電子郵件的安全,IP安全,Web安全,惡意軟件及防火墻等內…

UI自動化-(web端窗口截圖文件上傳-實操入門)

1、窗口截圖 1. UI自動化中,為什么需要進行窗口截圖? 調試和故障排除:截圖可以直觀地查看界面的狀態,快速識別和解決問題。當自動化過程中出現錯誤或異常時,通過查看截圖可以確定是否是界面元素的問題,例…

C++ opencv 學習

文章目錄 1、創建窗口2、讀取圖片3、視頻采集4、Mat的使用5、異或操作6、通道分離,通道合并7、色彩空間轉換8、最大值、最小值9、繪制圖像10、多邊形繪制11、隨機數12、鼠標實時繪制矩形13、歸一化14、resize操作15、旋轉翻轉16、視頻操作17、模糊操作18、高斯模糊操…

SpringBoot整合MyBatis實現增刪改查

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人???? ??個人主頁:Leo的博客 ??當前專欄: 循序漸進學SpringBoot ?特色專欄: MySQL學習 ??本文內容: SpringBoot整合MyBatis實現增刪改查 ??個人知識庫: Leo知識庫,歡迎大家訪…

mysql之 case when

1 簡單 case 函數,IF函數 格式: CASE input_expression WHEN when_expression THENresult_expression [...n ] [ ELSEelse_result_expression ENDIF(條件,True結果,False結果)2 條件表達式 可嵌套多層,類似于 if … else if … else … end…

Java進階-IO(1)

進入java IO部分的學習,首先學習IO基礎,內容如下。需要了解流的概念、分類還有其他一些如集合與文件的轉換,字符編碼問題等,這次先學到字節流的讀寫數據,剩余下次學完。 一、IO基礎 1、背景 1.1 數據存儲問題 變量…

代碼隨想錄day11(1)字符串:反轉字符串中的單詞 (leetcode151)

題目要求:給定一個字符串,將其中單詞順序反轉,且每個單詞之間有且僅有一個空格。 思路:因為本題沒有限制空間復雜度,所以首先想到的是用split直接分割單詞,然后將單詞倒敘相加。 但如果想讓空間復雜度為O…

芯來科技發布最新NI系列內核,NI900矢量寬度可達512/1024位

參考:芯來科技發布最新NI系列內核,NI900矢量寬度可達512/1024位 (qq.com) 本土RISC-V CPU IP領軍企業——芯來科技正式發布首款針對人工智能應用的專用處理器產品線Nuclei Intelligence(NI)系列,以及NI系列的第一款AI專用RISC-V處理器CPU IP…

反向迭代器

反向迭代器 以list為例,我們完全可以再添加一個__list_reverse_iterator結構體,只需要修改和–的邏輯 template <class T, class Ref, class Ptr> struct __list_reverse_iterator {...self& operator(){_node _node->_prev;return *this;}self operator(int){…

Android 14.0 Launcher3定制化之桌面分頁橫線改成圓點顯示功能實現

1.前言 在14.0的系統rom產品定制化開發中&#xff0c;在進行launcher3的定制化中&#xff0c;在雙層改為單層的開發中&#xff0c;在原生的分頁 是橫線&#xff0c;而為了美觀就采用了系統原來的另外一種分頁方式&#xff0c;就是圓點比較美觀&#xff0c;接下來就來分析下相關…

網絡爬蟲部分應掌握的重要知識點

目錄 一、預備知識1、Web基本工作原理2、網絡爬蟲的Robots協議 二、爬取網頁1、請求服務器并獲取網頁2、查看服務器端響應的狀態碼3、輸出網頁內容 三、使用BeautifulSoup定位網頁元素1、首先需要導入BeautifulSoup庫2、使用find/find_all函數查找所需的標簽元素 四、獲取元素的…

基于springboot+vue的健身房管理系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

●139.單詞拆分 ● 關于多重背包,你該了解這些! ●背包問題總結篇!

●139.單詞拆分 物品&#xff1a;wordDict里面的單詞&#xff1b;背包容量&#xff1a;s.size()。 1.dp[j]含義。dp[j]true表示字符串前j個可以拆分成字典中的單詞。dp[s.size()] 就是最后的結果&#xff0c;整個字符串能&#xff08;true&#xff09;不能&#xff08;false…

Docker 創建容器并指定時區

目錄 1. 通過環境變量設置時區&#xff08;推薦&#xff09;2. 掛載宿主機的時區文件到容器中3. 總結 要在 Docker 容器中指定時區&#xff0c;可以通過兩種方式來實現&#xff1a; 1. 通過環境變量設置時區&#xff08;推薦&#xff09; 在 Docker 運行時&#xff0c;可以通…

NumPy數據處理詳解的筆記1

NumPy數據處理詳解的筆記1 第1章NumPy基礎 NumPy是用于處理多維數組的數值運算庫&#xff0c;不僅可用于 機器學習&#xff0c;還可以用于圖像處理&#xff0c;語言處理等任務。 1.1 NumPy的基礎與安裝方法 1.1.1 NumPy入門 NumPy是Python中進行科學計算所必備的基礎軟件庫…