На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Определение цвета фото
    Дано PDF
    Конвертирую в JPG

    Надо определить сколько точек белых, сколько цветных и сколько принадлежажщих Grayscale

    Всю голову сломал как сделать?
      Да просто же:
      1.Читаете JPG, скажем, через GDI+ в буфер, в картинку.
      2.Там попиксельно бежите по ней, получая цвет каждого.
      3.Определив для себя какую область RGB-куба назовём "белой", "серой", "цветной", записываем плюс единичку в ту переменную.
      4.В конце выдаём количество или соотношение оных.
        Цитата Славян @
        Да просто же:
        1.Читаете JPG, скажем, через GDI+ в буфер, в картинку.
        2.Там попиксельно бежите по ней, получая цвет каждого.
        3.Определив для себя какую область RGB-куба назовём "белой", "серой", "цветной", записываем плюс единичку в ту переменную.
        4.В конце выдаём количество или соотношение оных.

        1. понятно
        2. при размере 3600*3000 сколько времени понадобится на 1 картину? Я имел ввиду оптимизированную функцию.
        3. Вот самое сложное RGB. Не могу понять какие считать ч/б, какие к цв. Если взять за исходник скан то там белого практически не будет.
        4. Это самое простое.

        По факту уточнение:
        1. быстрое чтение попиксельное
        2. RGB что ч/б что цвет.
          Время - менее секунды
          Попиксельно - TBitmap.Scanline или библиотечка TQuickPixels
          Для определения цветности перевести RGB в HSV/HSL (функция в Delphi есть) или использовать другую метрику цветовой насыщенности.

          Если файлов много, и производительности будет не хватать, можно использовать библиотеку OpenCV для загрузки и конвертации (cvConvert) (но на порядок этим не ускорить)
          Сообщение отредактировано: MBo -
            Цитата MBo @

            пример можно?
              Цитата DeZik @
              1. быстрое чтение попиксельное
              Одна машинная инструкция. Быстрее - почти некуда (шейдеры ГП разве что?).
              ExpandedWrap disabled
                bmpPNG->LockBits( &rect, Gdiplus::ImageLockModeRead, PixelFormat32bppPARGB, &bitmapData);
                // меняем красную и синюю компоненты
                    for( rgba *src=(rgba *)bitmapData.Scan0; h>0; h--) ...

              Цитата DeZik @
              2. RGB что ч/б что цвет.
              ExpandedWrap disabled
                rgba *p = ((rgba *)bitmapData.Scan0)[adres];
                if( abs(p->red - p->blue) + abs(p->blue - p->green) + abs(...)<степень ) p = степеньСерого;
                else p = цветнаяКажись;
                Цитата Славян @
                rgba *p = ((rgba *)bitmapData.Scan0)[adres];
                if( abs(p->red - p->blue) + abs(p->blue - p->green) + abs(...)<степень ) p = степеньСерого;
                else p = цветнаяКажись;

                Что есть RGBA и т.п. внятный пример, а не обрывок.

                зачем мы "// меняем красную и синюю компоненты"
                  rgba - структура, состоящая из 4 байт:
                  ExpandedWrap disabled
                    struct
                    {
                     char r,g,b,a;
                    }

                  Замена компонент - просто обрывок из левого кода, чтобы показать, как картинка блокируется, а потом получаем прямой доступ к пикселам.
                    Цитата Славян @
                    struct
                    {
                     char r,g,b,a;

                    мы по-моему на delphi пишем здесь, а не на др. языках.

                    я просил привести пример законченной функции сканирования и законченной функции анализа.
                      1. Я счёл, что на Паскаль вы запросто переведёте.
                      2. Скажите номер сообщения, где вы просите "привести пример законченной функции сканирования и законченной функции анализа"?..
                        Цитата Славян @
                        1. Я счёл, что на Паскаль вы запросто переведёте.

                        к сожалению нет
                        Цитата Славян @
                        2. Скажите номер сообщения, где вы просите "привести пример законченной функции сканирования и законченной функции анализа"?..

                        Цитата DeZik @
                        внятный пример, а не обрывок.
                          Увы, но все примеры у меня - Си'шные. Если не подходят, то - пардон. :oops:
                            Какая цель преследуется? Это учебная задача или практическая?

                            Цитата DeZik @
                            Дано PDF
                            Конвертирую в JPG

                            Почему JPG? Это обязательное условие или просто так захотелось?

                            Цитата DeZik @
                            Надо определить сколько точек белых, сколько цветных и сколько принадлежажщих Grayscale

                            Технически, белый тоже относится к Grayscale...

                            Цитата DeZik @
                            Не могу понять какие считать ч/б, какие к цв. Если взять за исходник скан то там белого практически не будет.

                            Grayscale это когда R=G=B иначе это цвет, но, есть понятие абсолютного значения цвета с точки зрения RGB, где белым цветом будет FFFFFF, а есть понятие визуального восприятия, когда мы смотрим на скан чертежа и понимаем, что это белый лист и черные линии, а в абсолютных значениях там нет ни белого ни черного.

                            Так что без уточнений по задаче тяжело что-то советовать.
                              Цитата x128 @
                              Grayscale это когда R=G=B иначе это цвет, но, есть понятие абсолютного значения цвета с точки зрения RGB, где белым цветом будет FFFFFF, а есть понятие визуального восприятия, когда мы смотрим на скан чертежа и понимаем, что это белый лист и черные линии, а в абсолютных значениях там нет ни белого ни черного.

                              Ну это проще.
                              1. Переводим RGB в HSV.
                              2. Ищем на скане цвет с самой низкой S и самой высокой V.
                              3. Все достаточно близкие по S и V к нему цвета считаем белым.
                              4. Ищем цвет с самыми низкими S и V.
                              5. Все достаточно близкие по S и V к нему цвета считаем чёрным.
                              S - контраст, V - яркость, H можно игнорировать.
                                Цитата Писатель @
                                Ну это проще.
                                1. Переводим RGB в HSV.
                                2. Ищем на скане цвет с самой низкой S и самой высокой V.
                                3. Все достаточно близкие по S и V к нему цвета считаем белым.
                                4. Ищем цвет с самыми низкими S и V.
                                5. Все достаточно близкие по S и V к нему цвета считаем чёрным.
                                S - контраст, V - яркость, H можно игнорировать.



                                Рабочий пример пожалуйста
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0648 ]   [ 17 queries used ]   [ Generated: 28.03.24, 10:13 GMT ]