圖像

重要的

Databricks建議您使用二進製文件數據源加載圖像數據到Spark DataFrame作為原始字節。看到圖像應用的參考解決方案對於處理圖像數據的推薦工作流。

圖像數據來源抽象了圖像表示的細節,並提供了一個標準的API來加載圖像數據。要讀取圖像文件,請指定數據源格式作為圖像

df火花格式“圖像”負載“< path-to-image-data >”

類似的api也存在於Scala、Java和R。

您可以導入嵌套的目錄結構(例如,使用類似於/ / dir / /路徑),您可以通過指定帶有分區目錄的路徑來使用分區發現(即類似於/道路/ / dir /日期= 2018-01-02 /類別=汽車).

圖像結構

圖像文件作為DataFrame加載,其中包含一個名為圖像包含以下字段:

圖像結構體包含所有圖像數據|--起源字符串代表URI|--高度整數圖像高度像素|--寬度整數圖像寬度像素|--nChannels|--模式|--數據

字段的位置:

  • nChannels:顏色通道數。對於灰度圖像,典型值為1,對於彩色圖像(例如,RGB)為3,對於帶alpha通道的彩色圖像為4。

  • 模式:整數標誌,表示如何解釋數據字段。它指定數據存儲的數據類型和通道順序。該字段的值被期望(但不是強製的)映射到下表中顯示的OpenCV類型之一。OpenCV類型被定義為1、2、3或4通道和像素值的幾個數據類型。通道順序指定顏色存儲的順序。例如,如果您有一個典型的三通道圖像,其中包含紅色、藍色和綠色組件,則有六種可能的順序。大多數庫都使用RGB或BGR。三(四)通道OpenCV類型預計以BGR(A)順序。

    OpenCV中類型到數字的映射(數據類型x通道數量)

    類型

    C1

    C2

    C3

    C4

    CV_8U

    0

    8

    16

    24

    CV_8S

    1

    9

    17

    25

    CV_16U

    2

    10

    18

    26

    CV_16S

    3.

    11

    19

    27

    CV_32S

    4

    12

    20.

    28

    CV_32S

    5

    13

    21

    29

    CV_64F

    6

    14

    22

    30.

  • 數據:以二進製格式存儲的圖像數據。圖像數據表示為一個三維數組,其維度形狀(高度、寬度、nChannels)和由mode字段指定的類型為t的數組值。數組按行為主的順序存儲。

顯示圖像數據

的磚顯示功能支持顯示圖像數據。看到圖片

筆記本

下麵的筆記本展示了如何讀取和寫入數據到圖像文件。

圖像數據源筆記本

圖像數據源的局限性

圖像數據源對Spark DataFrame創建過程中的圖像文件進行解碼,增加了數據的大小,並在以下場景中引入了限製:

  1. 持久化DataFrame:如果希望將DataFrame持久化到Delta表中以方便訪問,則應該持久化原始字節而不是已解碼的數據,以節省磁盤空間。

  2. 洗牌分區:洗牌解碼的圖像數據占用更多的磁盤空間和網絡帶寬,這導致洗牌速度變慢。你應該盡可能推遲解碼圖像的時間。

  3. 選擇其他解碼方法:圖像數據源使用javax的image IO庫解碼圖像,這使您無法選擇其他圖像解碼庫以獲得更好的性能或實現定製的解碼邏輯。

方法可以避免這些限製二進製文件數據源加載圖像數據和解碼隻根據需要。