Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 58

Преобразование картинки

18.02.2016, 12:32. Показов 1766. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос на миллион как из такой картинки

сделать вот такую картинку

код разный но суть я надеюсь донес
подскажи как это сделать
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2016, 12:32
Ответы с готовыми решениями:

Преобразование картинки в текст
Вопрос очень странный, и я не уверен, что смогу получить на него ответ. Может кто-то встречал библиотеки, позволяющие преобразовывать...

Класс Bitmap, преобразование размеров картинки с picturebox
мне нужна помощь тоесть небольшая потсказка Bitmap img = new Bitmap(picture.Image); Color c; int x = e.X;...

Преобразование картинки в base64
Всем привет, помогите пожалуйста понять, что не так, помочь поправить код. Суть задачи преобразовать картинки в base64 и передать на...

13
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
18.02.2016, 13:59
1) Наложить сетку и посчитать значение цветности пикселей в каждой ячейке.
2) Построить (нарисовать) то что получилось
0
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 58
18.02.2016, 14:03  [ТС]
а как ее наложить сетку
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
18.02.2016, 14:09
например картинка размером 120x120 - для сетки 10x10 => 120 / 10 = 12 пиксилей) Вот и все.
Затем перебираете все квадратики 12x12, а вкаждом квадратике перебираем пиксели. Считаем процентное отношение черного к белому и собственно все) (Арифметика 3 класс)

C#
1
2
3
4
5
6
7
8
9
for(int i = 0; i < 10; i++)
{
 
   for(int j = 0;j < 12;l++)
   {
 
   }
 
}
0
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 58
18.02.2016, 14:15  [ТС]
Ужас я тупой я сдаюсь
если алгоритм не сложный напишите пожалуйста
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
18.02.2016, 14:17
Цитата Сообщение от Лунев Посмотреть сообщение
напишите пожалуйста
Я же его написал ))
0
0 / 0 / 1
Регистрация: 28.02.2014
Сообщений: 58
18.02.2016, 14:18  [ТС]
нет вы не поняли что бы рисовал(восстанавливал,дорисовывал....) я в край тупой
вот вижу код а применить не могу
0
18.02.2016, 15:27

Не по теме:

Цитата Сообщение от Лунев Посмотреть сообщение
Вопрос на миллион
Согласен сделать за пол-миллиона. Да, я демпингую :D

0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
19.02.2016, 22:39
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

Лунев, ну раз миллион никто не дал, рассказываю даром (точнее под GPL3)
По пунктам:
1) Поскольку изначальное изображение немного повернуто, то сразу наложить сетку не получится. Сначала нужно выровнять изображение. Для этого можно применить метод описанный здесь. Там же можно взять исходник. Загрузив исходное изображение, получаем выровненное:


2) Далее я буду опираться на исходники, приведенные выше по ссылке и просто добавлю в программу небольшой метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
        private void FindDataMatrix(Bitmap rotated)
        {           
            //находим вертикальный и горизонтальный компакт
            var vert = new Compact(rotated, 3, false, InterpolationMode.High);
            var horiz = new Compact(rotated, 3, true, InterpolationMode.High);
 
            //находим отступы матрицы от краев
            var vertPadding = vert.FindPadding();
            var horizPadding = horiz.FindPadding();
 
            //вырезаем матрицу
            var bmp = new Bitmap(horizPadding.Length, vertPadding.Length);
            using (var gr = Graphics.FromImage(bmp))
                gr.DrawImage(rotated, -horizPadding.From, -vertPadding.From);
 
            //шаг ячеек матрицы
            var stepW = 1f * bmp.Width / 16;
            var stepH = 1f * bmp.Height / 16;
 
            //считаем суммарное число черных точек в каждой ячейке матрицы
            var matrix = new int[16, 16];
            using (var wr = new ImageWrapper(bmp, true))
            foreach(var p in wr)
            if(wr[p].G < 127)
            {
                var i = p.X / stepW;
                var j = p.Y / stepH;
                if(i < 16 && j < 16)
                    matrix[(int)i, (int)j]++;
            }
 
            //создаем изображение 16x16 и ставим пиксел черным, если в матрице в этой ячейке более 25% черных пикселов
            var bmp2 = new Bitmap(16, 16);
            using (var wr = new ImageWrapper(bmp2))
                foreach (var p in wr)
                    wr[p] = matrix[p.X, p.Y] > 16*16/4 ? Color.Black : Color.White;
 
            //выводим результат
            pbRight.Image = bmp2;
        }
В этот метод передается уже повернутое изображение. Затем строятся вертикальный и горизонтальный компакт. Компакт это по сути просто сумма всех пикселов по горизонтали или вертикали, гистограмма.
Далее, по компактам ищутся начало матрицы и ее конец. После чего изображение обрезается по найденным границам. На этом этапе мы получаем следующее:


3) Затем мы пробегаемся по полученному изображению и ищем черные пикселы. Поскольку баркод задан в формате DataMatrix, то матрица имеет фиксированный размер 16x16. И мы легко можем отнести каждый пиксел к ячейке искомой матрицы. Число черных пикселов заносится в соотв ячейки матрицы.

4) После того, как матрица получена, оцениваем число пикселов, попавших в каждую ячейку. Там где заполнение более 25% - считаем что эта ячейка заполнена, в противном случае - нет.

5) Формируем изображение 16x16, куда и заносим найденное решение. Окончательный результат:


Полный исходник SkewCorrection - копия (2).zip.
3
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.02.2016, 23:12
Цитата Сообщение от Storm23 Посмотреть сообщение
Поскольку изначальное изображение немного повернуто, то сразу наложить сетку не получится.
С таким небольшим наклоном получается:
Миниатюры
Преобразование картинки  
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.02.2016, 23:23
Storm23,
А можно узнать, что за классы Compact и ImageWrapper, а то я отступы для обрезки искал, перебирая пиксели с каждой стороны.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
19.02.2016, 23:31
Цитата Сообщение от Даценд Посмотреть сообщение
А можно узнать, что за классы Compact и ImageWrapper, а то я отступы для обрезки искал, перебирая пиксели с каждой стороны.
Это мои классы из исходника ссылку на который я давал.
Цитата Сообщение от Даценд Посмотреть сообщение
С таким небольшим наклоном получается
Ну наклон может быть больше. Ведь это снимают камерой с рук или что то в этом роде. Нельзя же полностью игнорировать тот факт, что изображение наклонено, если мы делаем серьезное приложение.
1
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
19.02.2016, 23:55
Цитата Сообщение от Storm23 Посмотреть сообщение
Нельзя же полностью игнорировать тот факт, что изображение наклонено, если мы делаем серьезное приложение.
Согласен. Просто не посчитал это серьезным приложением.

Не по теме:

Хотя сумма серьезная была изначально озвучена :)



Исправлюсь.
Еще вопрос. Я тоже на 25% остановился при проверке. Вы 25% процентов черных пикселов как достаточное их количество экспериментально получили? Или есть какая теория?
И еще вопрос. У меня при проверке "на черноту" чисто черных пикселов было немного, пришлось такое условие применять:
if (pix.R < 10 && pix.G < 10 && pix.B < 10). У Вас вижу проверку if(wr[p].G < 127). Это равнозначно или здесь свойство G не составляющая цвета, т.е. не тоже самое, что pix.G в моем условии?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
20.02.2016, 00:06
Цитата Сообщение от Даценд Посмотреть сообщение
Еще вопрос. Я тоже на 25% остановился при проверке. Вы 25% процентов черных пикселов как достаточное их количество экспериментально получили? Или есть какая теория?
Нет, просто от фонаря взял.
Цитата Сообщение от Даценд Посмотреть сообщение
И еще вопрос. У меня при проверке "на черноту" чисто черных пикселов было немного, пришлось такое условие применять:
if (pix.R < 10 && pix.G < 10 && pix.B < 10). У Вас вижу проверку if(wr[p].G < 127). Это равнозначно или здесь свойство G не составляющая цвета, т.е. не тоже самое, что pix.G в моем условии?
Здесь G это то же самое что и G у вас, то есть зеленый канал. Почему я проверяю только G? Ну во-первых у автора изображение уже в градациях серого, поэтому отдельные каналы нет смысла проверять.
Во-вторых, человеческий глаз более всего чувствителен к зеленому цвету (более 70% яркости приходится на зеленый канал). Поэтому если требуется быстрое преобразование в серый цвет, то вместо стандартной формулы, можно брать просто зеленый канал. Намного быстрее, с практически тем же результатом.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2016, 00:06
Помогаю со студенческими работами здесь

Преобразование картинки в код
Всем привет! Возник вопрос. Есть картинка .jpeg, она состоит из пикселов, каждый пиксел имеет код своего цвета. Как преобразовать...

Преобразование картинки в base64
Подскажите, пожалуйста, можно ли в Делфи 7 преобразовать картинку формата jpg в base64? Уже всё обгулил и заяндексил - ничего. Очень нужна...

Преобразование картинки в текстовый формат
подскажите как преобразовать картинку скажем в JPEG или BMP в текстовой формат вот как здесь :

Преобразование высоты картинки под ширину
$size = getimagesize( &quot;image.jpg&quot; ); //$size == 698 //$size == 1100 как сделать, чтобы при смене значения ширины картинки $size,...

Преобразование картинки для передачи по радиоканалу
Всем доброго времени суток!Прошу помощи!Собрал в симулинке модельку. Вроде работает. Теперь нужно вместо случайных ноликов и единичек,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru