plt和cv2有不同的圖像表示方式和顏色通道順序

在處理圖像時,matplotlib.pyplot?(簡稱?plt) 和?OpenCV?(簡稱?cv2) 有不同的圖像表示方式和顏色通道順序。了解這些區別對于正確處理和顯示圖像非常重要。

1. 圖像形狀和顏色通道順序

matplotlib.pyplot?(plt)
  • 形狀plt?通常使用?(height, width, channels)?的形狀來表示圖像。
  • 顏色通道順序plt?使用 RGB 順序,即紅、綠、藍。
OpenCV?(cv2)
  • 形狀cv2?通常使用?(height, width, channels)?的形狀來表示圖像。
  • 顏色通道順序cv2?使用 BGR 順序,即藍、綠、紅。

2. 示例代碼

使用?matplotlib.pyplot?讀取和顯示圖像
import matplotlib.pyplot as plt
import numpy as np# 讀取圖像
img = plt.imread('path_to_image.jpg')# 顯示圖像
plt.imshow(img)
plt.show()
使用?OpenCV?讀取和顯示圖像
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img = cv2.imread('path_to_image.jpg')# 將 BGR 轉換為 RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 顯示圖像
plt.imshow(img_rgb)
plt.show()

3. 轉換顏色通道順序

如果你需要在?plt?和?cv2?之間轉換圖像,可以使用?cv2.cvtColor?函數來轉換顏色通道順序。

從 BGR 到 RGB
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img_bgr = cv2.imread('path_to_image.jpg')# 將 BGR 轉換為 RGB
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)# 顯示圖像
plt.imshow(img_rgb)
plt.show()
從 RGB 到 BGR
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img_rgb = plt.imread('path_to_image.jpg')# 將 RGB 轉換為 BGR
img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)# 顯示圖像
cv2.imshow('Image', img_bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. 保存圖像

使用?matplotlib.pyplot?保存圖像
import matplotlib.pyplot as plt# 讀取圖像
img = plt.imread('path_to_image.jpg')# 保存圖像
plt.imsave('output_image.jpg', img)
使用?OpenCV?保存圖像
import cv2# 讀取圖像
img = cv2.imread('path_to_image.jpg')# 保存圖像
cv2.imwrite('output_image.jpg', img)

5. 總結

  • plt:使用?(height, width, channels)?形狀,顏色通道順序為 RGB。
  • cv2:使用?(height, width, channels)?形狀,顏色通道順序為 BGR。
  • 轉換:使用?cv2.cvtColor?函數在 BGR 和 RGB 之間進行轉換。

詳細解釋一下?matplotlib.pyplot?(簡稱?plt) 和?OpenCV?(簡稱?cv2) 在處理圖像時的形狀和顏色通道順序的區別,以及它們與模型中?tensor?的區別。

1.?matplotlib.pyplot?(plt)

  • 形狀plt?通常使用?(height, width, channels)?的形狀來表示圖像。
  • 顏色通道順序plt?使用 RGB 順序,即紅、綠、藍。
示例代碼
import matplotlib.pyplot as plt
import numpy as np# 讀取圖像
img = plt.imread('path_to_image.jpg')# 顯示圖像
plt.imshow(img)
plt.show()

2.?OpenCV?(cv2)

  • 形狀cv2?通常使用?(height, width, channels)?的形狀來表示圖像。
  • 顏色通道順序cv2?使用 BGR 順序,即藍、綠、紅。
示例代碼
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img_bgr = cv2.imread('path_to_image.jpg')# 將 BGR 轉換為 RGB
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)# 顯示圖像
plt.imshow(img_rgb)
plt.show()

3. 模型中的?tensor

在深度學習模型中,圖像通常表示為?tensor,其形狀和顏色通道順序可能與?plt?和?cv2?有所不同。

  • 形狀:模型中的?tensor?通常使用?(batch_size, channels, height, width)?的形狀來表示圖像。
  • 顏色通道順序:模型中的?tensor?通常使用 RGB 順序,即紅、綠、藍。
示例代碼
import torch
import torchvision.transforms as transforms
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img_bgr = cv2.imread('path_to_image.jpg')# 將 BGR 轉換為 RGB
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)# 將圖像轉換為 tensor
transform = transforms.ToTensor()
img_tensor = transform(img_rgb)# 打印 tensor 的形狀
print(img_tensor.shape)  # 輸出: (3, height, width)# 如果需要批量處理,可以添加一個 batch 維度
img_tensor = img_tensor.unsqueeze(0)  # 形狀變為 (1, 3, height, width)# 顯示圖像
img_np = img_tensor.squeeze(0).permute(1, 2, 0).numpy()  # 轉換回 (height, width, channels)
plt.imshow(img_np)
plt.show()

4. 轉換顏色通道順序

如果你需要在?pltcv2?和模型中的?tensor?之間轉換圖像,可以使用以下方法:

從 BGR 到 RGB
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img_bgr = cv2.imread('path_to_image.jpg')# 將 BGR 轉換為 RGB
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)# 顯示圖像
plt.imshow(img_rgb)
plt.show()
從 RGB 到 BGR
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img_rgb = plt.imread('path_to_image.jpg')# 將 RGB 轉換為 BGR
img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)# 顯示圖像
cv2.imshow('Image', img_bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()
從?tensor?到?plt?或?cv2
import torch
import torchvision.transforms as transforms
import cv2
import matplotlib.pyplot as plt# 讀取圖像
img_bgr = cv2.imread('path_to_image.jpg')# 將 BGR 轉換為 RGB
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)# 將圖像轉換為 tensor
transform = transforms.ToTensor()
img_tensor = transform(img_rgb)# 將 tensor 轉換回 numpy 數組
img_np = img_tensor.permute(1, 2, 0).numpy()  # 轉換回 (height, width, channels)# 顯示圖像
plt.imshow(img_np)
plt.show()

5. 總結

  • plt:使用?(height, width, channels)?形狀,顏色通道順序為 RGB。
  • cv2:使用?(height, width, channels)?形狀,顏色通道順序為 BGR。
  • 模型中的?tensor:使用?(batch_size, channels, height, width)?形狀,顏色通道順序為 RGB。

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

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

相關文章

基于PyTorch的深度學習5——神經網絡工具箱

可以學習如下內容: ? 介紹神經網絡核心組件。 ? 如何構建一個神經網絡。 ? 詳細介紹如何構建一個神經網絡。 ? 如何使用nn模塊中Module及functional。 ? 如何選擇優化器。 ? 動態修改學習率參數。 5.1 核心組件 神經網絡核心組件不多,把這些…

模擬調制技術詳解

內容摘要 本文系統講解模擬調制技術原理及Matlab實現,涵蓋幅度調制的四種主要類型:雙邊帶抑制載波調幅(DSB-SC)、含離散大載波調幅(AM)、單邊帶調幅(SSB)和殘留邊帶調幅(…

aws(學習筆記第三十一課) aws cdk深入學習(batch-arm64-instance-type)

aws(學習筆記第三十一課) aws cdk深入學習 學習內容: 深入練習aws cdk下部署batch-arm64-instance-type 1. 深入練習aws cdk下部署batch-arm64-instance-type 代碼鏈接 代碼鏈接 代碼鏈接 -> batch-arm64-instance-type之前代碼學習 之前學習代碼鏈接 -> aw…

讀書報告」網絡安全防御實戰--藍軍武器庫

一眨眼,20天過去了,刷完了這本書「網絡安全防御實戰--藍軍武器庫」,回味無窮,整理概覽如下,可共同交流讀書心得。在閱讀本書的過程中,我深刻感受到網絡安全防御是一個綜合性、復雜性極高的領域。藍軍需要掌…

生成任務,大模型

一個生成項目 輸入:文字描述(但是給的數據集是一串數字,id,ct描述,醫生描述) 輸出:診斷報告 一、數據處理 import pandas as pd #處理表格數據pre_train_file "data/train.csv"tr…

Spring Boot API 項目中 HAProxy 與 Nginx 的選擇與實踐

在開發 Spring Boot 構建的 RESTful API 項目時,負載均衡和反向代理是提升性能與可用性的關鍵環節。HAProxy 和 Nginx 作為兩種流行的工具,經常被用于流量分發,但它們各有側重。究竟哪一個更適合你的 Spring Boot API 項目?本文將…

Java常用集合與映射的線程安全問題深度解析

Java常用集合與映射的線程安全問題深度解析 一、線程安全基礎認知 在并發編程環境下,當多個線程同時操作同一集合對象時,若未采取同步措施,可能導致以下典型問題: 數據競爭:多個線程同時修改數據導致結果不可預測狀…

DeepLabv3+改進6:在主干網絡中添加SegNext_Attention|助力漲點

??【DeepLabv3+改進專欄!探索語義分割新高度】 ?? 你是否在為圖像分割的精度與效率發愁? ?? 本專欄重磅推出: ? 獨家改進策略:融合注意力機制、輕量化設計與多尺度優化 ? 即插即用模塊:ASPP+升級、解碼器 PS:訂閱專欄提供完整代碼 目錄 論文簡介 步驟一 步驟二…

使用 Elastic-Agent 或 Beats 將 Journald 中的 syslog 和 auth 日志導入 Elastic Stack

作者:來自 Elastic TiagoQueiroz 我們在 Elastic 一直努力將更多 Linux 發行版添加到我們的支持矩陣中,現在 Elastic-Agent 和 Beats 已正式支持 Debian 12! 本文演示了我們正在開發的功能,以支持使用 Journald 存儲系統和身份驗…

3.9[A]csd

在傳統CPU中心架構中,中央處理器通過內存訪問外部存儲器,而數據必須經過網絡接口卡才能到達外部存儲器。這種架構存在集中式計算、DRAM帶寬和容量挑戰、大量數據移動(服務器內和網絡)以及固定計算導致工作負載容量增長等問題。 而…

ESP32S3讀取數字麥克風INMP441的音頻數據

ESP32S3 與 INMP441 麥克風模塊的集成通常涉及使用 I2S 接口進行數字音頻數據的傳輸。INMP441 是一款高性能的數字麥克風,它通過 I2S 接口輸出音頻數據。在 Arduino 環境中,ESP32S3 的開發通常使用 ESP-IDF(Espressif IoT Development Framew…

DeepSeek大模型 —— 全維度技術解析

DeepSeek大模型 —— 全維度技術解析 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,可以分享一下給大家。點擊跳轉到網站。 https://www.captainbed.cn/ccc 文章目錄 DeepSeek大模型 —— 全維度技術解析一、模型架構全景解析1…

[Kubernetes] 7控制平面組件

1. 調度 kube- scheduler what 負責分配調度pod到集群節點監聽kube-apiserver,查詢未分配node的pod根據調度策略分配這些pod(更新pod的nodename)需要考慮的因素: 公平調度,資源有效利用,QoS,affinity, an…

PyTorch系列教程:編寫高效模型訓練流程

當使用PyTorch開發機器學習模型時,建立一個有效的訓練循環是至關重要的。這個過程包括組織和執行對數據、參數和計算資源的操作序列。讓我們深入了解關鍵組件,并演示如何構建一個精細的訓練循環流程,有效地處理數據處理,向前和向后…

LeetCode Hot100刷題——反轉鏈表(迭代+遞歸)

206.反轉鏈表 給你單鏈表的頭節點 head ,請你反轉鏈表,并返回反轉后的鏈表。 示例 1: 輸入:head [1,2,3,4,5] 輸出:[5,4,3,2,1]示例 2: 輸入:head [1,2] 輸出:[2,1]示例 3&#…

機器學習的發展史

機器學習(Machine Learning, ML)作為人工智能(AI)的一個分支,其發展經歷了多個階段。以下是機器學習的發展史概述: 1. 早期探索(20世紀50年代 - 70年代) 1950年:艾倫圖…

Springboot redis bitMap實現用戶簽到以及統計,保姆級教程

項目架構,這是作為demo展示使用: Redis config: package com.zy.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.Ob…

Ardupilot開源無人機之Geek SDK進展2025Q1

Ardupilot開源無人機之Geek SDK進展2025Q1 1. 源由2. 內容匯總2.1 【jetson-fpv】YOLO INT8 coco8 dataset 精度降級2.2 【OpenIPC-Configurator】OpenIPC Configurator 固件升級失敗2.3 【OpenIPC-Adaptive-link】OpenIPC RF信號質量相關顯示2.4 【OpenIPC-msposd】.srt/.osd…

《云原生監控體系構建實錄:從Prometheus到Grafana的觀測革命》

PrometheusGrafana部署配置 Prometheus安裝 下載Prometheus服務端 Download | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.https://prometheus.io/…

SpringMvc與Struts2

一、Spring MVC 1.1 概述 Spring MVC 是 Spring 框架的一部分,是一個基于 MVC 設計模式的輕量級 Web 框架。它提供了靈活的配置和強大的擴展能力,適合構建復雜的 Web 應用程序。 1.2 特點 輕量級:與 Spring 框架無縫集成,依賴…