Является ли двоичный файл самым обычным «форматом», в который можно преобразовать изображение? - PullRequest
0 голосов
/ 23 января 2020

Я делаю приложение, которое должно обнаруживать серые цифры на черном фоне с различными тонами или rgb (184, 180, 152).

Пример даты: The tricky date Пример ди git изображение, вырезанное из меню 4x8 только серым цветом: Example integer

В то время как фон монтона позволял простой Image.open(...).tobytes.index(Image.open(<filepath to digit>).tobytes()) проверять, был ли данный ди git на изображении, так как каждый фон остается тем же самым, «варьирующийся» фон имеет различный цветовой рисунок для каждого ди git. не серые пиксели в пространстве 4х8. Получение отдельного файла для всех 10 цифр каждой строки заняло бы так много времени и, скорее всего, сделало бы мое приложение очень медленным.

Неправильные возвращаемые значения, предоставляемые методом .tobytes(), сделали его практически невозможным (насколько я знаю, по крайней мере) ) применить RegEx, чтобы заполнить пустые пиксели любым произвольным цветом и таким образом проверять только серые области. Мой требуемый «формат» преобразованных данных для изображений будет таким, в котором каждый пиксель соответствует своей последовательности символов.

Например, цвет, соответствующий blank, blank, gray, станет 000000001040 однажды преобразованный из его Image.open(...) -формы, где 0000 является «пустым». Таким образом, я мог бы применить RegEx из возвращенной строки, которая бы заполняла пробелы любым произвольным цветом. Таким образом, будет проверяться только серый, в отличие от управления не серыми цветами в области 4x8. То, что я получаю, используя .tobytes(), скорее соответствует 1123999938212; Кажется, что шаблон меняется всякий раз, когда добавляется пиксель, и поэтому непредсказуем.

Однако я подозреваю, что это ошибка tobytes(), и что двоичный файл может удовлетворить мою потребность в получении последовательности, представляющей каждый пиксель. Если это правильно, как я могу преобразовать изображение в двоичную последовательность для использования в качестве строки?

Примечание: Когда я говорю «форматировать», я не являюсь что означает расширение, вместо «форматов» данных, таких как двоичные, шестнадцатеричные или XML.

Я не решаюсь использовать OpenCV, так как это может быть излишним, что сделает приложение, которое будет сканировать несколько изображений медленнее. В отсутствие лучшего решения я выберу его.

1 Ответ

0 голосов
/ 25 января 2020

Как оказалось, PIL уже предоставляет метод, идеально подходящий для моих нужд.

Все изображение можно преобразовать в список кортежей, содержащих RGBA каждого соответствующего пикселя, используя: list((Image.open(...).getdata()), где (255,255,255, 0) - пустой пиксель.

...