>>-6ren">
gpt4 book ai didi

image-processing - Spark 如何使用图像格式读取我的图像?

转载 作者:行者123 更新时间:2023-12-04 14:17:42 25 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但我无法弄清楚 Spark 如何使用 spark.read.format("image").load(....) 读取我的图像争论。

导入我的图像后,它给了我以下内容:

>>> image_df.select("image.height","image.width","image.nChannels", "image.mode", "image.data").show()
+------+-----+---------+----+--------------------+
|height|width|nChannels|mode| data|
+------+-----+---------+----+--------------------+
| 430| 470| 3| 16|[4D 55 4E 4C 54 4...|
+------+-----+---------+----+--------------------+

我得出的结论是:
  • 我的图像是 430x470 像素,
  • 我的图像是彩色的(由于 nChannels = 3 为 RGB),这是一种 openCV 兼容类型,
  • 我的图像模式是 16,它对应于特定的 openCV 字节顺序。
  • 有人知道我可以浏览哪个网站/文档以了解更多信息吗?
  • 数据列中的数据类型为 Binary但:
  • 当我运行时 image_df.select("image.data").take(1)我得到的输出似乎只有一个数组(见下文)。
  • >>> image_df.select("image.data").take(1)

    # **1/** Here are the last elements of the result
    ....<<One Eternity Later>>....x92\x89\x8a\x8d\x84\x86\x89\x80\x84\x87~'))]

    # 2/ I got also several part of the result which looks like:
    .....\x89\x80\x80\x83z|\x7fvz}tpsjqtkrulsvmsvmsvmrulrulrulqtkpsjnqhnqhmpgmpgmpgnqhnqhn
    qhnqhnqhnqhnqhnqhmpgmpgmpgmpgmpgmpgmpgmpgnqhnqhnqhnqhnqhnqhnqhnqhknejmdilcilchkbh
    kbilcilckneloflofmpgnqhorioripsjsvmsvmtwnvypx{ry|sz}t{~ux{ry|sy|sy|sy|sz}tz}tz}tz}
    ty|sy|sy|sy|sz}t{~u|\x7fv|\x7fv}.....


    接下来的内容与上面显示的结果相关联。这些可能是由于我缺乏有关 openCV(或其他)的知识。尽管如此:
  • 1/我不明白如果我得到一个 RGB 图像,我应该有 3 个矩阵,但输出在 .......\x84\x87~'))] 结束。 .我更想获得类似 [(...),(...),(...\x87~')] 的东西.
  • 2/这部分有什么特殊意义吗?像那些是每个矩阵之间的分隔符还是什么?

  • 为了更清楚我想要实现的目标,我想处理图像以在每个图像之间进行像素比较。因此,我想知道图像中给定位置的像素值(我假设如果我有一个 RGB 图像,我将有 3 个给定位置的像素值)。

    示例:假设我有一个仅在白天指向天空的网络摄像头,我想知道与左上角天空部分相对应的位置处的像素值,我发现这些值的串联给出了颜色浅蓝色表示照片是在晴天拍摄的。假设唯一的可能性是晴天采用颜色 Light Blue .
    接下来,我想将前一个连接与另一个位于完全相同位置但来自第二天拍摄的照片的像素值连接进行比较。如果我发现它们不相等,那么我得出的结论是给定的照片是在阴天/下雨天拍摄的。如果相等则晴天。

    对此的任何帮助将不胜感激。为了更好地理解,我已经把我的例子粗化了,但我的目标几乎是一样的。我知道可以存在 ML 模型来实现这些东西,但我很乐意先尝试一下。我的第一个目标是将此列拆分为 3 列对应于每个颜色代码:红色矩阵、绿色矩阵、蓝色矩阵

    最佳答案

    我想我有这个逻辑。我使用 keras.preprocessing.image.img_to_array() 函数来了解值是如何分类的(因为我有一个 RGB 图像,我必须有 3 个矩阵:每个颜色 R G B 一个)。发帖说如果有人想知道它是如何工作的,我可能错了,但我想我有一些东西:

    from keras.preprocessing import image
    import numpy as np
    from PIL import Image

    # Using spark built-in data source
    first_img = spark.read.format("image").schema(imageSchema).load(".....")
    raw = first_img.select("image.data").take(1)[0][0]
    np.shape(raw)
    (606300,) # which is 470*430*3



    # Using keras function
    img = image.load_img(".../path/to/img")
    yy = image.img_to_array(img)
    >>> np.shape(yy)
    (430, 470, 3) # the form is good but I have a problem of order since:

    >>> raw[0], raw[1], raw[2]
    (77, 85, 78)
    >>> yy[0][0]
    array([78., 85., 77.], dtype=float32)

    # Therefore I used the numpy reshape function directly on raw
    # to have 470 matrix of 3 lines and 470 columns:

    array = np.reshape(raw, (430,470,3))
    xx = image.img_to_array(array) # OPTIONAL and not used here

    >>> array[0][0] == (raw[0],raw[1],raw[2])
    array([ True, True, True])

    >>> array[0][1] == (raw[3],raw[4],raw[5])
    array([ True, True, True])

    >>> array[0][2] == (raw[6],raw[7],raw[8])
    array([ True, True, True])

    >>> array[0][3] == (raw[9],raw[10],raw[11])
    array([ True, True, True])

    因此,如果我理解得很好,spark 会将图像读取为一个大数组 - (606300,) 在这里 - 实际上每个元素都是有序的并对应于它们各自的颜色深浅(R G B)。
    完成我的小转换后,我获得了 3 列 x 470 行的 430 矩阵。由于我的图像是 (470x430) for (WidthxHeight),每个矩阵对应一个像素高度位置和每个矩阵内部:每种颜色 3 列,每个宽度位置 470 行。

    希望对某人有所帮助:)!

    关于image-processing - Spark 如何使用图像格式读取我的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58611888/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com