OpenCV 4基礎篇| OpenCV圖像的拆分和合并

目錄

  • 1. 通道拆分
    • 1.1 cv2.split
      • 1.1.1 語法結構
      • 1.1.2 注意事項
      • 1.1.3 代碼示例
    • 1.2 NumPy切片
      • 1.2.1 代碼示例
  • 2. 通道合并
    • 2.1 cv2.merge
      • 2.1.1 語法結構
      • 2.1.2 注意事項
      • 2.1.3 代碼示例

1. 通道拆分

1.1 cv2.split

1.1.1 語法結構

b,g,r = cv2.split(img[, mv]) #圖像拆分為 BGR 通道。
  • img:圖像數據,nparray 多維數組
  • mv:指定的分拆通道(可選)
  • b,g,r :分割成三個單通道圖像,分別代表藍色、綠色和紅色通道,并將它們分別賦值給b、g和r

1.1.2 注意事項

  • OpenCV 使用的圖像格式是 BGR(藍、綠、紅),而不是常見的 RGB 格式。因此,當你使用 cv2.split() 拆分通道時,得到的通道順序將是 B、G、R,而不是 R、G、B。
  • BGR 彩色圖像的數據形狀為 (width, height, channels=3),返回的 B/G/R 通道的數據形狀為 (width, height),不能按照 BGR 彩色圖像直接顯示。
  • 如果直接用 imshow 顯示返回的單通道對象,將被視為 (width, height) 形狀的灰度圖像顯示。
  • 如果要正確顯示某一顏色分量,需要增加另外兩個通道值(置 0)轉換為 BGR 三通道格式,再用 imshow 才能顯示為拆分通道的顏色。
  • cv2.split() 操作復雜耗時,可以直接使用 NumPy 切片得到分離通道。

1.1.3 代碼示例

import cv2imgFile = "img/lena.jpg"
img1 = cv2.imread(imgFile, flags=1)  # flags=1 讀取彩色圖像(BGR)
# 通道拆分
b,g,r=cv2.split(img1)
# 顯示圖像
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)cv2.waitKey(0)
cv2.destroyAllWindows()

1

1.2 NumPy切片

1.2.1 代碼示例

import cv2imgFile = "img/lena.jpg"
img1 = cv2.imread(imgFile, flags=1)  # flags=1 讀取彩色圖像(BGR)
# 獲取 B 通道
bImg = img1.copy()  # 獲取 BGR
bImg[:, :, 1] = 0  # G=0
bImg[:, :, 2] = 0  # R=0# 獲取 G 通道
gImg = img1.copy()  # 獲取 BGR
gImg[:, :, 0] = 0  # B=0
gImg[:, :, 2] = 0  # R=0# 獲取 R 通道
rImg = img1.copy()  # 獲取 BGR
rImg[:, :, 0] = 0  # B=0
rImg[:, :, 1] = 0  # G=0# 顯示圖像
cv2.imshow("b", bImg)
cv2.imshow("g", gImg)
cv2.imshow("r", rImg)cv2.waitKey(0)
cv2.destroyAllWindows()  # 釋放所有窗口

1

2. 通道合并

2.1 cv2.merge

2.1.1 語法結構

cv2.merge(mv[, dst])  #BGR 通道合并
  • mv:要合并的單通道
  • dst:通道合并的圖像,nparray 多維數組

2.1.2 注意事項

  • 進行合并的 B、G、R 單通道圖像分量,數據形狀必須為 (width, height),而不是形狀為 (width, height, channels=3) 的藍色/綠色/紅色圖像。
  • 單通道圖像分量的圖像大小 (width, height) 必須相同才能進行合并。
  • 顏色通道要按照 B、G、R 通道次序合并,才能得到 BGR 格式的合并結果。
  • cv2.merge() 操作復雜耗時,推薦使用 NumPy 數組合并函數 np.stack() 生成合成圖像。

2.1.3 代碼示例

import cv2imgFile = "img/lena.jpg"
img1 = cv2.imread(imgFile, flags=1)  # flags=1 讀取彩色圖像(BGR)
# 通道拆分
b, g, r = cv2.split(img1)# 通道合并
rgb = cv2.merge([r, g, b])
gbr = cv2.merge([g, b, r])
brg = cv2.merge([b, r, g])# 顯示圖像
cv2.imshow("rgb", rgb)
cv2.imshow("gbr", gbr)
cv2.imshow("brg", brg)cv2.waitKey(0)
cv2.destroyAllWindows()  # 釋放所有窗口

1

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

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

相關文章

【開發工具】GIF 錄屏工具推薦 ( GIF123 - 推薦使用 | GifCam | LICEcap )

文章目錄 一、GIF 錄屏工具推薦1、GIF123 ( 推薦使用 )2、GifCam3、LICEcap 本博客中介紹的 3 款 GIF 錄屏工具下載地址 : https://download.csdn.net/download/han1202012/88905642 也可以到對應的官網獨立下載 : GIF123 : https://gif123.aardio.com/ ;GifCam : https://bl…

FAST-LIO系列-閱讀筆記

近期,閱讀了FAST-LIO、FAST-LIO2以及Faster_LIO論文,這三篇論文都屬于濾波器的SLAM算法,下面記錄一下三個工作的主要貢獻和不同。 FAST-LIO 1.提出了一種計算效率高、魯棒性強的激光雷達-慣性里程測量框架。使用緊密耦合的迭代擴展卡爾曼濾…

報錯:/bin/sh: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

解釋:這是shell 警告你無法將當前的區域設置(locale)更改為 zh_CN.UTF-8,這個警告可能不會影響 fc-cache 命令的實際運行,但它確實表明系統在某些方面可能無法正確地處理與 zh_CN.UTF-8 相關的內容。 1.檢查當前的區域…

2024年口腔護理市場行業未來前景預測:正畸護理用品市場行業分析報告

口腔護理是維護口腔健康的重要步驟,近年來,隨著大眾口腔健康意識的不斷增強,人們對于口腔護理的消費意愿也不斷增加,由此,口腔護理市場的市場規模也比較大。 根據鯨參謀電商數據分析平臺的相關數據顯示,20…

OSCP靶場--Walla

OSCP靶場–Walla 考點(1.hydra http基本認證爆破: 2.sudo -l:python導入外部模塊提權 3.Linux內核提權:cve-2021-4034) 1.nmap掃描 ## ┌──(root?kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.181.97 --min-rate 2000 Starting N…

Linux網絡編程:Socket套接字

一、socket地址API 1、主機字節序和網絡字節序 小端字節序&#xff08;主機字節序&#xff09;是指一個整數的高位字節存儲在內存的高地址處 大端字節序&#xff08;網絡字節序&#xff09;是指一個整數的高位字節存儲在內存的低地址處 判斷機器字節序 #include <stdio.…

RT-DETR算法優化改進: 特征融合漲點篇 | 廣義高效層聚合網絡(GELAN) | YOLOv9

??????本文獨家改進:即結合用梯度路徑規劃(CSPNet)和(ELAN)設計了一種廣義的高效層聚合網絡(GELAN),高效結合RT-DETR,實現漲點。 ??????在多個私有數據集和公開數據集VisDrone2019、PASCAL VOC實現漲點 RT-DETR魔術師專欄介紹: https://blog.csdn.net/…

使用postman測試若依登錄接口API-2

請求方式 由于登錄控制器可知&#xff1a;該請求方式為Post請求 請求地址 在請求路徑欄輸入請求地址&#xff0c;如下圖所示&#xff1a; 參數體 在Body鍵入所需參數&#xff0c;類型選擇raw,數據格式選擇"JSON"&#xff1a;如下圖所示&#xff1a; 認證成功與失敗…

解釋存儲過程和函數的區別,以及它們在MySQL中的用途。如何創建和使用存儲過程和函數?

解釋存儲過程和函數的區別&#xff0c;以及它們在MySQL中的用途。 存儲過程和函數在MySQL中的區別及用途 區別&#xff1a; 返回值&#xff1a; 函數&#xff1a;必須有一個返回值&#xff0c;這可以是一個標量值或一個表。如果沒有明確的RETURN語句&#xff0c;函數將返回N…

香桿箐騎行記,春回大地

2024年3月2日春回大地之際我們校長騎行群再次踏上征程前往香桿箐。這次騎行不僅是一次對身體的鍛煉更是一次心靈的洗禮。 清晨的陽光灑滿大地我們從郊野公園后門出發踏上了前往香桿箐的道路。沿途的風景如畫綠樹成蔭鮮花盛開讓人心曠神怡。我們沿著山路蜿蜒前行感受著大自然的韻…

正則表達式-分組

1、oracle-正則表達式&#xff1a;將09/29/2008 用正則表達式轉換成2008-09-29 select regexp_replace(09/29/2008, ^([0-9]{2})/([0-9]{2})/([0-9]{4})$, \3-\1-\2) replace from dual; 解析&#xff1a;regexp_replace-替換&#xff0c; 第一個參數&#xff1a;需要進行處…

Golang Copy()方法學習

前言 主要是涉及到深淺拷貝相關的&#xff0c;但是在看的一個資料過程中發現他有錯…并且一系列&#xff0c;復制粘貼他的&#xff0c;也都錯了。 錯誤文章指路 很顯然&#xff0c;Copy是深拷貝啊&#xff01;&#xff01;&#xff01; Copy功能 copy的代碼很少&#xff0c…

chatgp4 教我學搭建網站1-課程目錄

Prerequisite 讓我們為學習如何建立網站規劃一個先修課程。我們將從0.1開始&#xff0c;不直接進入網站建設本身&#xff1a; 0.1 網絡技術基礎&#xff1a;了解互聯網如何工作&#xff0c;包括域名系統&#xff08;DNS&#xff09;、HTTP/HTTPS協議等。 0.2 HTML基礎&#x…

OAuth2:保障現代應用程序安全的關鍵協議

OAuth2&#xff1a;保障現代應用程序安全的關鍵協議 摘要&#xff1a;本文將為您詳細介紹OAuth2&#xff0c;這一保障現代應用程序安全的關鍵協議。我們將探討OAuth2的概念、工作流程、應用場景以及優勢&#xff0c;幫助您更好地理解并應用這一強大的安全認證機制。 一、引言…

玩轉地下管網三維建模:MagicPipe3D系統

地下管網是保障城市運行的基礎設施和“生命線”。隨著實景三維中國建設的推進&#xff0c;構建地下管網三維模型與地上融合的數字孿生場景&#xff0c;對于提升智慧城市管理至關重要&#xff01;針對現有三維管線建模數據差異大、建模交互弱、模型效果差、缺乏語義信息等缺陷&a…

Bert Encoder和Transformer Encoder有什么不同

前言&#xff1a;本篇文章主要從代碼實現角度研究 Bert Encoder和Transformer Encoder 有什么不同&#xff1f;應該可以幫助你&#xff1a; 深入了解Bert Encoder 的結構實現深入了解Transformer Encoder的結構實現 本篇文章不涉及對注意力機制實現的代碼研究。 注&#xff1a;…

詳解:npm升級到pnpm對比優化點!!

npm3之前 依賴樹層級過深&#xff0c;導致依賴路徑過長并且相同依賴模塊會被重復安裝,占用電腦磁盤空間 npm3之后 修改為扁平化處理 算法復雜存在多項目間依賴相同副本的情況導致沒有明確被依賴的包也可以直接引用&#xff0c;管理復雜 pnpm node_modules改成非扁平化結構&a…

微軟37頁論文逆向工程Sora,得到了哪些結論?

一篇論文回顧 Sora 文生視頻技術的背景、技術和應用。 追趕 Sora&#xff0c;成為了很多科技公司當下階段的新目標。研究者們好奇的是&#xff1a;Sora 是如何被 OpenAI 發掘出來的&#xff1f;未來又有哪些演進和應用方向&#xff1f; Sora 的技術報告披露了一些技術細節&…

找專業人士編輯百度百科,避免審核問題

對于想在百度百科上創建詞條或修改現有詞條的網友&#xff0c;可能會有一些疑問&#xff0c;比如找第三方代不通過審核創建百度百科。那么&#xff0c;創建百度百科需要多少錢呢&#xff1f;讓我們仔細看看。 百度百科創建服務一直存在。為了節省時間&#xff0c;很多人選擇專業…

java八股文復習-----2024/03/03

1.接口和抽象類的區別 相似點&#xff1a; &#xff08;1&#xff09;接口和抽象類都不能被實例化 &#xff08;2&#xff09;實現接口或繼承抽象類的普通子類都必須實現這些抽象方法 不同點&#xff1a; &#xff08;1&#xff09;抽象類可以包含普通方法和代碼塊&#x…