Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 10.03.2018
Сообщений: 21

Перевод изображения в двоичный код

23.06.2018, 14:56. Показов 10818. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане! Прочитав статью о персептеронах (http://neuralnet.info/chapter/... %BD%D1%8B/), захотелось написать свой, но сталкнулся с проблемой, переводом картинки в двоичный код. Суть такая: есть картинка 55x55 пикселей, на которой есть только два цвета: абсолютно белый и абсолютно черный (формат .bmp, глубина цвета 1 бит), эту картинку надо перевести в двоичный, белый цвет - 0, черный цвет - 1. Вчера нашел код, который делает это, но 1) я не очень понял как он работает, 2) переводит изображение в двоичный код криво, т.е. на моей картинке нарисована буква "А", после перевода получается двоичный код, в котором можно увидеть 1) перевернутую букву "А", 2) она частично разорвана и смещена. Пожалуйста, помогите.
Код проги ниже:

Python
1
2
3
4
5
6
7
8
9
fpath = '/home/kostya/Desktop/leta.bmp'    #путь к картинке
def pretty_bytes(fpath, delim=''):
    with open(fpath, 'rb') as f:
        for chunk in iter(lambda: f.read(8), b''):
            print(delim.join([f'{byte:08b}' for byte in chunk ]))
 
pretty_bytes('/home/kostya/Desktop/leta.bmp')
print()
pretty_bytes('/home/kostya/Desktop/leta.bmp', ' ')
Двоичный код ниже:
0100001001001101111101100000000100000000 000000000000000000000000
0000000000000000001111100000000000000000 000000000010100000000000
0000000000000000001101110000000000000000 000000000011011100000000
0000000000000000000000010000000000000001 000000000000000000000000
0000000000000000101110000000000100000000 000000001100010000001110
0000000000000000110001000000111000000000 000000000000001000000000
0000000000000000000000100000000000000000 000000001111111111111111
1111111100000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000011110000000
0000000000000000000000000000000000000000 000000000000011111000000
0000000000000000000000000000000000000000 000000000000011111000000
0000000000000000000000001111000000000000 000000000000011111000000
0000000000000000000000011111000000000000 000000000000011111100000
0000000000000000000000011111000000000000 000000000000001111100000
0000000000000000000000111111000000000000 000000000000001111110000
0000000000000000000000111111000000000000 000000000000000111110000
0000000000000000000000111110000000000000 000000000000000111111000
0000000000000000000001111110000000000000 000000000000000011111000
0000000000000000000001111100000000000000 000000000000000011111100
0000000000000000000011111100000000000000 000000000000000001111100
0000000000000000000011111000000000000000 000000000000000001111100
0000000000000000000111111000000000000000 000000000000000001111110
0000000000000000000111110000000000000000 000000000000000000111110
0000000000000000001111110000000000000000 000000000000000000111111
1111111111111111111111100000000000000000 000000000000000000011111
1111111111111111111111100000000000000000 000000000000000000011111
1111111111111111111111000000000000000000 000000000000000000011111
1111111111111111111111000000000000000000 000000000000000000011111
1111111111111111111110000000000000000000 000000000000000000001111
1111111111111111111110000000000000000000 000000000000000000000111
1110000000000001111100000000000000000000 000000000000000000000111
1110000000000011111100000000000000000000 000000000000000000000011
1110000000000011111000000000000000000000 000000000000000000000011
1111000000000111111000000000000000000000 000000000000000000000001
1111000000000111110000000000000000000000 000000000000000000000001
1111100000001111110000000000000000000000 000000000000000000000000
1111100000001111100000000000000000000000 000000000000000000000000
1111110000011111100000000000000000000000 000000000000000000000000
0111110000011111000000000000000000000000 000000000000000000000000
0111111000111111000000000000000000000000 000000000000000000000000
0011111000111110000000000000000000000000 000000000000000000000000
0011111001111110000000000000000000000000 000000000000000000000000
0011111101111100000000000000000000000000 000000000000000000000000
0001111111111100000000000000000000000000 000000000000000000000000
0001111111111000000000000000000000000000 000000000000000000000000
0000111111111000000000000000000000000000 000000000000000000000000
0000111111110000000000000000000000000000 000000000000000000000000
0000011111110000000000000000000000000000 000000000000000000000000
0000011111110000000000000000000000000000 000000000000000000000000
0000011111100000000000000000000000000000 000000000000000000000000
0000001111100000000000000000000000000000 000000000000000000000000
0000001111100000000000000000000000000000 000000000000000000000000
0000000111100000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 000000000000000000000000
0000000000000000000000000000000000000000 00000000


01000010 01001101 11110110 00000001 00000000 00000000 00000000 00000000
00000000 00000000 00111110 00000000 00000000 00000000 00101000 00000000
00000000 00000000 00110111 00000000 00000000 00000000 00110111 00000000
00000000 00000000 00000001 00000000 00000001 00000000 00000000 00000000
00000000 00000000 10111000 00000001 00000000 00000000 11000100 00001110
00000000 00000000 11000100 00001110 00000000 00000000 00000010 00000000
00000000 00000000 00000010 00000000 00000000 00000000 11111111 11111111
11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 10000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 11000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 11000000
00000000 00000000 00000000 11110000 00000000 00000000 00000111 11000000
00000000 00000000 00000001 11110000 00000000 00000000 00000111 11100000
00000000 00000000 00000001 11110000 00000000 00000000 00000011 11100000
00000000 00000000 00000011 11110000 00000000 00000000 00000011 11110000
00000000 00000000 00000011 11110000 00000000 00000000 00000001 11110000
00000000 00000000 00000011 11100000 00000000 00000000 00000001 11111000
00000000 00000000 00000111 11100000 00000000 00000000 00000000 11111000
00000000 00000000 00000111 11000000 00000000 00000000 00000000 11111100
00000000 00000000 00001111 11000000 00000000 00000000 00000000 01111100
00000000 00000000 00001111 10000000 00000000 00000000 00000000 01111100
00000000 00000000 00011111 10000000 00000000 00000000 00000000 01111110
00000000 00000000 00011111 00000000 00000000 00000000 00000000 00111110
00000000 00000000 00111111 00000000 00000000 00000000 00000000 00111111
11111111 11111111 11111110 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111110 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111100 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111100 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111000 00000000 00000000 00000000 00000000 00001111
11111111 11111111 11111000 00000000 00000000 00000000 00000000 00000111
11100000 00000001 11110000 00000000 00000000 00000000 00000000 00000111
11100000 00000011 11110000 00000000 00000000 00000000 00000000 00000011
11100000 00000011 11100000 00000000 00000000 00000000 00000000 00000011
11110000 00000111 11100000 00000000 00000000 00000000 00000000 00000001
11110000 00000111 11000000 00000000 00000000 00000000 00000000 00000001
11111000 00001111 11000000 00000000 00000000 00000000 00000000 00000000
11111000 00001111 10000000 00000000 00000000 00000000 00000000 00000000
11111100 00011111 10000000 00000000 00000000 00000000 00000000 00000000
01111100 00011111 00000000 00000000 00000000 00000000 00000000 00000000
01111110 00111111 00000000 00000000 00000000 00000000 00000000 00000000
00111110 00111110 00000000 00000000 00000000 00000000 00000000 00000000
00111110 01111110 00000000 00000000 00000000 00000000 00000000 00000000
00111111 01111100 00000000 00000000 00000000 00000000 00000000 00000000
00011111 11111100 00000000 00000000 00000000 00000000 00000000 00000000
00011111 11111000 00000000 00000000 00000000 00000000 00000000 00000000
00001111 11111000 00000000 00000000 00000000 00000000 00000000 00000000
00001111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000011 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000011 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000001 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000



PS Автор статьи переводил свою картинку вручную т.к. её разрешение 3x5 пикселей; у меня в python shell двоичный код без брешей, не знаю почему здесь так; Мне 15 лет могу что-то не понимать, поэтому, пожалуйста, объясняйте подробнее и понятнее. Спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2018, 14:56
Ответы с готовыми решениями:

Перевод текста в двоичный код
Допустим у меня есть текст (hello 1), в котором могут быть использованы символы из моего алфавита ('abcdefghijklmnopqrstuvwxyz...

перевод десятичного вещественного в машинный код(двоичный код)
пожалуйста , подскажите пожалуйста код C++ ,для перевода вещественного числа в машиное (двоичное представление,32 бит). Без использования...

Двоичный код изображения
Помогите пожалуйста. Необходим алгоритм получения двоичного кода изображения. Программа примерно будет выглядеть так: кнопка...

5
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
23.06.2018, 16:56
Цитата Сообщение от Wine Посмотреть сообщение
я не очень понял как он работает
Тут можно прочитать https://docs.python.org/3/libr... .html#iter

Цитата Сообщение от Wine Посмотреть сообщение
переводит изображение в двоичный код криво, т.е. на моей картинке нарисована буква "А", после перевода получается двоичный код, в котором можно увидеть
В файле bmp есть служебная информация и ее нужно пропустить при чтении, примерно так

Python
1
2
3
4
with open(fpath, 'rb') as f:
        f.read(60)
        for chunk in iter(lambda: f.read(8), b''):
            print(delim.join([f'{byte:08b}' for byte in chunk ]))
Цитата Сообщение от Wine Посмотреть сообщение
перевернутую букву "А",
Это потому что в формате bmp изображение хранится перевернутым

О формтае bmp можно прочитать тут https://jenyay.net/Programming/Bmp
0
0 / 0 / 0
Регистрация: 10.03.2018
Сообщений: 21
05.07.2018, 18:16  [ТС]
Извините, но я не очень понял как работает iter(), какой смысл несет/что делает эта строчка: f'{byte:08b}', как работает этот цикл for: for byte in chunk (также как и обычный?) и как работает/как влияет на вывод эта строчка: f.read(60)?
PS Извиняюсь, что не был на форуме две недели (не было интернета + пытался восстановить пароль от аккаунта), понимаю что это не очень хорошо.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
05.07.2018, 19:45
Цитата Сообщение от Wine Посмотреть сообщение
как работает/как влияет на вывод эта строчка: f.read(60)
Эта строчка нужна для пропуска служебной информации, читаем в никуда 60 байт

Цитата Сообщение от Wine Посмотреть сообщение
какой смысл несет/что делает эта строчка: f'{byte:08b}'
Эта строка записывает число в двоичной системе, из нулей и единиц

Насчет остального, вот упрощенная запись

Python
1
2
3
4
5
6
7
8
with open(fpath, 'rb') as f:
        chunk = f.read(60)
        while chunk != b'':
            chunk = f.read(8)
            s = ''
            for byte in chunk:
                s += f'{byte:08b}'
            print(s)
0
Эксперт Python
 Аватар для dondublon
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,180
Записей в блоге: 6
06.07.2018, 17:57
Лучший ответ Сообщение было отмечено Wine как решение

Решение

Цитата Сообщение от Wine Посмотреть сообщение
def pretty_bytes(fpath, delim=''): with open(fpath, 'rb') as f: for chunk in iter(lambda: f.read(8), b''): print(delim.join([f'{byte:08b}' for byte in chunk ]))
Это полнейшее извращение.
Во-первых, зачем вам строки? Во-вторых, ручной разбор граф формата.

На выходе вам надо получить numpy array, это стандарт. Считать картинку можно чере PIL.
Делается это в одну операцию на питоне. Гуглить "python PIL image to numpy array".
1
0 / 0 / 0
Регистрация: 10.03.2018
Сообщений: 21
12.07.2018, 21:34  [ТС]
Здравствуйте, dondublon, большое спасибо за подсказаное решение. Действительно, с помощью библиотеки PIL это делается гораздо проще.
Персептерон дописан, работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2018, 21:34
Помогаю со студенческими работами здесь

Перевод в двоичный код
Помогите, нужно перевести int и float в двоичный код, но когда переводит тип float, там не правильно переводит целое число, как исправить? ...

Перевод в двоичный код
#include <stdio.h> #include <conio.h> #include <stdlib.h> main () { int i,k; char s; printf("vvedite stroku...

Перевод в двоичный код
Здравствуйте, не ожидал, что столкнусь с подобной проблемой textBox2.Text = ""; string str; ...

Перевод в двоичный код
перевод числа в двоичный код и обратно

Перевод в двоичный код
Всем доброе время суток! Под скажыте есть ли стандартные функцыи в яве для того чтобы целое значение розписать в двоичном коде (01011......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru