图像

重要的

砖建议您使用二进制文件数据源将图像数据加载到火花DataFrame作为原始字节。看到参考图像应用的解决方案推荐的工作流程来处理图像数据。

图像数据来源抽象的图像表示的细节,并提供一个标准API加载图像数据。读取图像文件,指定数据源格式作为图像

df=火花格式(“图像”)负载(“< path-to-image-data >”)

类似的api存在Scala、Java和R。

您可以导入一个嵌套的目录结构(例如,使用一个路径/ / dir / /路径),您可以使用分区发现通过指定一个路径分区目录(即路径/道路/ / dir /日期= 2018-01-02 /类别=汽车)。

图像结构

图像文件加载包含单个struct-type DataFrame列图像以下字段:

图像:结构体包含所有图像数据|——起源:字符串代表URI|——高度:整数,图像高度像素|——宽度:整数,图像宽度像素|——nChannels|——模式|——数据

的字段有:

  • nChannels:颜色通道的数量。灰度图像的典型值是1、3为彩色图像(例如,RGB),和4彩色图像alpha通道。

  • 模式:整数标记表明如何解释数据字段。它指定了数据类型和通道秩序中存储的数据。字段的值预计(但不执行)映射到一个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_32U

    4

    12

    20.

    28

    CV_32S

    5

    13

    21

    29日

    CV_64F

    6

    14

    22

    30.

  • 数据:图像数据存储在一个二进制格式。图像数据被表示为一个三维数组的尺寸形状(高度、宽度、nChannels)和数组类型t的值指定的模式。数组存储在存储顺序。

显示图像数据

的砖显示函数支持显示图像数据。看到图片

笔记本的例子:图像文件读写数据

以下笔记本显示了如何读和写数据图像文件。

图像数据来源的笔记本

在新标签页打开笔记本

图像数据来源的局限性

图像数据源解码图像文件创建火花DataFrame期间,增加了数据大小,并引入了限制在以下场景:

  1. 坚持DataFrame:如果你想坚持DataFrame成三角洲表,方便使用,你应该坚持原始字节而不是解码的数据来节省磁盘空间。

  2. 洗牌的分区:洗牌解码图像数据需要更多的磁盘空间和网络带宽,导致慢的洗牌。你应该尽可能地推迟解码图像。

  3. 选择其他的解码方法:图像数据源使用图像的IO库javax解码图像,它阻止你选择其他图像解码库获得更好的性能或实施定制的解码逻辑。

这些限制可以避免使用二进制文件数据源只在需要的时候加载图像数据和解码。