|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
Добавить к коду подсчет яркостей22.09.2020, 09:49. Показов 7755. Ответов 124
Метки нет (Все метки)
Хочу расширить код подсчитывая количество значений яркости dithPixel например в виде структуры [Value, Count], но не могу вспомнить как это сделать через хеши (именованные массивы).
0
|
||||||
| 22.09.2020, 09:49 | |
|
Ответы с готовыми решениями:
124
Добавить к коду подсчет вызовов функции Подсчёт суммы значений в ячейках по столбцу по коду товара Добавить комментарии к коду |
|
Модератор
|
|||
| 28.09.2020, 14:01 | |||
|
От распараллеливания толку не будет. Только если изображений много и каждое обрабатывать в своей задаче. Ещё раз пишу - ускорить можно. Но вместо GetBrightness(), Math.Truncate(pixel * 1000), надо реализовывать свои двоичные быстрые методы. Так же надо разобраться как работает ImageWrapper - возможно он вносит существенную задержку. Не надо отсылать куда-то что-то искать, рыть.
0
|
|||
|
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,058
|
|
| 28.09.2020, 14:03 | |
|
1
|
|
|
Модератор
|
|||
| 28.09.2020, 14:13 | |||
|
belalugoci, мне в принципе не нравится ImageWrapper.
Вряд ли у вас есть необходимость в таком типе. У вас есть готовая пиксельная картинка. Что такое яркость? Насколько, знаю это сумма трёх младших байт пикселя (четвёртый - прозрачность). Вот не помню только просто сумма или с коэффициентами. Получаете значение яркости от 0 до 255*3. И дальше уже проводите статистику. Зачем из байтов получать float потом из него int... Это моветон. Способов получения из bmp пиксельного (байтового) массива - множество. На форуме тоже есть попадались такие темы. Добавлено через 2 минуты Сомневаюсь. Мне кажется основную задержку вносит тип ImageWrapper . Без него массив такого размера должен считать за микросекунды, ну, десятки микросекунд.
0
|
|||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|
| 28.09.2020, 14:19 | |
|
Элд Хасп
https://www.cyberforum.ru/blog... g3507.html Добавлено через 5 минут Насчёт ускорения - можно самостоятельно напрямую с буфером изображения работать, не оборачивая каждый пиксель в 'Point', а каждый цвет в 'Color', что в вашем случае даёт десятки миллионов операций выделения памяти под эти мелкие объекты. Ещё можно отказаться от дефолтной реализации вычисления яркости и представления её во 'float' с последующей перегонкой в 'int'.
1
|
|
|
Модератор
|
|||||||||
| 28.09.2020, 14:25 | |||||||||
|
Только получение отдельного пикселя занимает чёрт знает сколько времени
Надо получить просто байтовую развёртку bmp и работать с ней. Даже, на C# это должно быть очень быстро. Максимум десятые доли секунды. Добавлено через 1 минуту Об этом и пишу. Добавлено через 1 минуту
0
|
|||||||||
|
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,058
|
||
| 28.09.2020, 14:30 | ||
|
1
|
||
|
Модератор
|
||
| 28.09.2020, 14:33 | ||
|
Но на вскидку больше 90% времени занимают ImageWrapper, GetBrightness(), Math.Truncate(pixel * 1000). Надо сначала от них избавиться и посмотреть результат.
0
|
||
|
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,058
|
|
| 28.09.2020, 14:35 | |
|
Согласен. Сначала нужно посмотреть на что уходит большая часть времени.
1
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||||||||||||||||||||||
| 29.09.2020, 09:54 [ТС] | |||||||||||||||||||||||||||
|
А грамотный кодинг это скорее к вам, чем ко мне. Добавлено через 1 час 53 минуты internal static Bitmap Process2(Bitmap bmp)00:00:00.028 - инициализация переменных 00:00:00.100 - время на:
00:00:05.400 - общее время работы Итого 28 мс на инициализации 72 мс на using 1501 мс на подсчёт яркостей 366 мс на вывод текста 3433 мс на заполнение пикселей Black/White Colors Добавлено через 2 минуты
Добавлено через 1 час 26 минут
0
|
|||||||||||||||||||||||||||
|
Модератор
|
||||||
| 29.09.2020, 12:15 | ||||||
|
belalugoci, чуть покопался в методах работы с изображениями - до этого не приходилось с ними работать.
Сбацал такой вот метод получающий яркости:
Отпишите результат. Добавлено через 2 минуты belalugoci, по какой-то причине у меня не совпадает размерность исходного изображения с размером массива bmpBytes. Так и должно быть?
0
|
||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 29.09.2020, 12:44 [ТС] | |||
|
создать переменную int [] a = GetBrightnes(bmp); // замена строки using (var source = new ImageWrapper(bmp, true))и это у нас что? линейная развёртка изображения? яркости от 0 до 99? это критически мало, если пользоваться целочисленным представлением то хотя бы word
0
|
|||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||
| 29.09.2020, 12:46 | ||
|
1
|
||
|
Модератор
|
|||||||||
| 29.09.2020, 13:00 | |||||||||
|
Не в процентах, а умноженные на сто. Считается яркость по формуле Y=30*R+59*G+11*B.Можно добавить сразу деление на 100:
Добавлено через 2 минуты
0
|
|||||||||
|
Модератор
|
||||||||||||||||
| 29.09.2020, 14:14 | ||||||||||||||||
|
belalugoci, вот рабочий код, если понял, что вам надо.
Как оно будет коррелироваться с размером изображения - не знаю. Проверьте сами.
1
|
||||||||||||||||
|
Модератор
|
||||||||||||
| 29.09.2020, 14:23 | ||||||||||||
|
Дробные значения - это ошибки округления при подсчёте по формуле Y=0.3*R+0.59*G+0.11*B.Добавлено через 4 минуты При желании можно считать и дробные значения. Для этого надо изменить коэффициент деления и, соответственно, размерность массива:
0
|
||||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|||||||
| 29.09.2020, 14:24 | |||||||
|
Ну и можно чуть-чуть ускорить, если убрать копирование в массив byte[] bmpBytes, читая пиксели напрямую через указатель bmpData.Scan0. Это так же уберет все проверки на выход за границы массива. Или использовать новомодный Span<T>.
1
|
|||||||
|
Модератор
|
||
| 29.09.2020, 14:31 | ||
|
Как его использовать? Не получится ли , что ускорится в одном месте (создание байтового массива), но значительно замедлится в другом (доступ к каждому пикселю в цикле)?
0
|
||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
||||||||||||
| 29.09.2020, 14:35 | ||||||||||||
|
Удалить
1
|
||||||||||||
|
Модератор
|
|||
| 29.09.2020, 14:50 | |||
|
Проверю сейчас. Добавлено через 5 минут
0
|
|||
| 29.09.2020, 14:50 | |
|
Добавить комментарии к коду
Добавить к коду многоадресный делегат К готовому коду добавить процедуру К коду добавить вывод в консоль Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|