Это может быть глупый вопрос, но я не могу понять, как Спарк прочитал мое изображение, используя аргумент 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 пикселей,
- мое изображение является цветным (RGB из-за nChannels = 3), которое является 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 столбца, соответствующих каждому цветовому коду: красная матрица, зеленая матрица, синяя матрица