簡體   English   中英

Python和OpenCV中類似的圖像形狀轉換

[英]Similar Image shape conversion in Python and OpenCV

我是Python的新手,很難理解Python中的圖像形狀轉換。

在Python代碼中,圖像I has I.shape

ipdb> I.shape
(720, 1280, 3)

在Python中運行此命令將轉換I's shape並存儲到h5_image

 h5_image = np.transpose(I, (2,0,1)).reshape(data_shape)

其中data_shape是:

 ipdb> p data_shape
 (1, 3, 720, 1280)
  1. OpenCV的輸出相似的功能是什么?

  2. (1, 3, 720, 1280) ,1是什么意思?

  3. (3, 720, 1280)(720, 1280, 3) (3, 720, 1280)什么區別?

您可以在python / numpy中將圖像( I )視為具有N個維度的矩陣。

  • 如果您有灰度圖像,則每一行和每一列都有一個值。 這意味着2個維度,形狀將為: I.shape --> (rows, cols)
  • 對於RGB圖像,您有3個通道,紅色,綠色,藍色。 因此,您總共有3個維度: I.shape --> (rows, cols, 3)
  • 對於RGBA圖像,您有4個通道,紅色,綠色,藍色,alpha。 仍然3維: I.shape --> (rows, cols, 4)

這些是保存圖像數據的常用方法,但是當然,只要您知道如何讀取,就可以以任何喜歡的方式保存它。 例如,您可以將其作為一維矢量保持一個長矢量,還可以保留圖像的寬度和高度,因此您知道如何將其讀取為2D格式。

對於您更具體的問題:

  1. 我不確定您要尋找的輸出是什么。 您也可以在OpenCV中執行transpose()flip()
  2. (1, 3, 720, 1280)僅表示您還有其他退化尺寸。 要訪問每個像素,您必須編寫I[1,channel,row,col] 1是不必要的,並且不是保存圖像陣列的常用方法。 為什么要這樣做? 您要以特定格式保存嗎? (HDF5?)
  3. 唯一的區別在於數據的排列方式。 例如,對於(3, 720, 1280) ,要獲得紅色通道,您需要編寫: red = I[0,:,:] (720, 1280, 3)的情況下,您需要編寫: red = I[:,:,0] (這是更常見的)。

*有些性能問題取決於您內存中圖像數據的實際排列方式,但是我認為您現在不需要關心這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM