Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40

Замена цвета пикселя с условием равенства/неравенства другому цвету

10.01.2022, 16:19. Показов 6246. Ответов 60

Студворк — интернет-сервис помощи студентам
У меня есть изображение, просканированное с помощью scanline. Полученный результат выведен на многострочное поле. Следующим действием, которое выполняется новой кнопкой, нужно этот массив (76800 пикселей) проверить на условие: если элемент массива меньше одного цвета и больше второго, то этот элемент снова отображается на поле, но если данное условие не выполняется, то элемент заменяется другим цветом

Когда начала прописывать это условие, то каждый раз возникала одна и та же ошибка – Incompatible types. Пробовала по-другому записывать код цвета, но изменений не было

Не бросайте тапками, я только учусь и еще не все понимаю

Прикрепляю коды кнопок со сканированием и того, что я пыталась сделать + глобальные переменные (x_max, y_max - размеры сканируемого изображения)

Delphi
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
41
42
43
44
var
  x_max, y_max: Integer;
  scan: PIntegerArray;
  x, y: Integer;
  str: string;
 
procedure TForm1.btn3Click(Sender: TObject);
begin
  with TBitmap.Create do
    begin
      Assign(img1.Picture.Graphic);
      PixelFormat := pf32bit;
      mmo1.Lines.Clear;
      for y := 0 to y_max - 1 do
        begin
          str := '';
          scan := ScanLine[y];
          for x := 0 to x_max - 1 do
            str := str + IntToHex(scan[x], 6) + ' ';
            mmo1.Lines.Add(str);
        end;
        Free;
    end;
end;
 
procedure TForm1.btn4Click(Sender: TObject);
begin
  mmo1.Lines.Clear;
    for x := 0 to x_max - 1 do
       for y := 0 to y_max - 1 do
      if scan[x, y] > $635f1c and scan[x, y] < $e3de9c then // место ошибки
        begin
          str := '';
          str := str + IntToHex(scan[x, y], 6) + ' ';
          mmo1.Lines.Add(str);
        end
      else
        begin
          str := '';
          scan[x, y] := $99ccff;
          str := str + IntToHex(scan[x, y], 6) + ' ';
          mmo1.Lines.Add(str);
        end;  
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2022, 16:19
Ответы с готовыми решениями:

C++ Поиск пикселя заданного цвета и замена другим.
Ребята, помогите пожалуйста с решением задачи. Кучу документации перекопала - никак не могу найти решение. Нужно разработать программу,...

Поиск координат по цвету пикселя
Есть программа, в ней есть пиксель, у которого надо определить координаты по цвету. Пиксель не статичный по цвету и координатам. Но если...

Определение цвету по значениям пикселя
Вопрос наверное не совсем про программирование, но по нахождению алгоритм: У меня есть программа, которая кушает картинку и поочередно...

60
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
11.01.2022, 21:49
Студворк — интернет-сервис помощи студентам
А вот прямо обвести можете?
\один или несколько таких участков.
Для ясности понимания

Ну или стрелочкой показать...
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
11.01.2022, 21:55
FoxyFall, если возможно, ещё прикрепи изображение, подобное которому хочется получить.

Цитата Сообщение от FoxyFall Посмотреть сообщение
затемненных участков. Именно эти участки нужно выделить
Что значит выделить? Заменить цвет?

Цитата Сообщение от FoxyFall Посмотреть сообщение
а пространство вокруг них перевести в контрастный цвет
Что значит "перевести в контрастный цвет"? Можно увеличить контрастность части уже существующей картинки.
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
11.01.2022, 22:06
Я правильно понимаю, что темные участки нужно сделать еще темнее и выделить границу таких участков?
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
11.01.2022, 22:52  [ТС]
Как-то так. Не очень удачный снимок, поэтому трудно выделить нужное

Затемнение нужно оставить такими, как они есть. Пространство, в котором находятся эти затмения, то есть светло-желтое поле и все баги линзы микроскопа, заменить другим цветом

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

К сожалению, подобного изображения на выходе нет. Разве нарисую что-нибудь похожее в иллюстраторе
Миниатюры
Замена цвета пикселя с условием равенства/неравенства другому цвету  
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
12.01.2022, 10:52
Цитата Сообщение от FoxyFall Посмотреть сообщение
Как-то так. Не очень удачный снимок, поэтому трудно выделить нужное
Думаю большинству будет трудно оценить степень удачности этого снимка, учитывая, что даже у человека с "обученной нейросеткой" есть сложности. Пока задача выглядит очень абстрактно. Нужно больше деталей про что как и зачем. Могу с уверенностью сказать, что простым сравнением цвета ничего не выйдет.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
12.01.2022, 11:44
тут скорее всего уже нужна хорошая такая математика, потому что сравнивать надо не пиксели, а некие "зоны", а их надо еще хорошо определить
скорее всего решение будет где-то в районе фамилий Гаусс и Фурье
тут вроде был кто-то с профильным образованием, но надо искать в разделе Алгоритмы.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
12.01.2022, 12:13
Цитата Сообщение от FoxyFall Посмотреть сообщение
Разве нарисую что-нибудь похожее в иллюстраторе
Да, изобразите что-то подобное тому, что нужно получить.

Вообще, думаю, тут цветовое пространство RGB не подходит для данной задачи. Думаю, лучше будет перевести в HSV, и тогда можно ориентироваться на одну компоненту H, которая обозначает цвет и так и выделять нужные цвета.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
12.01.2022, 13:40  [ТС]
Предположим, это увеличенная область фото после обработки. Желтые "пиксели" - агломераты (темные пятна перед обработкой). Зеленые "пиксели" - среда с замененным цветом

На memo оно как-то так должно быть: байо – замененный пиксель, а RRGGBB – попал в диапазон и не заменялся
Миниатюры
Замена цвета пикселя с условием равенства/неравенства другому цвету   Замена цвета пикселя с условием равенства/неравенства другому цвету  
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
12.01.2022, 14:14
Цитата Сообщение от FoxyFall Посмотреть сообщение
темные пятна перед обработкой
Вы же понимаете, что "тёмный" - понятие совершенно относительное. Вот на картинке квадраты А и В совершенно одинакового цвета и яркости:


Значит получается, вам нужно брать среднюю яркость области вокруг рассматриваемого пикселя и как-то сравнивать с пикселем, чтобы узнать, насколько пиксель тёмный или светлый. И уже потом более светлые можно заменить на какой-то определённый цвет. Пока такое предложение.
Кодить не спешу, пока не пойму, как именно нужно обработать картинку.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
12.01.2022, 14:15
Или не среднюю яркость, а определять мин/макс диапазон яркости в некоторой области и относительно него уже смотреть яркость конкретного пикселя.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
12.01.2022, 15:02  [ТС]
AzAtom, для сравнения темный/не темный использую такую шкалу. Но это все еще приблизительная область нужных цветов
Миниатюры
Замена цвета пикселя с условием равенства/неравенства другому цвету  
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
12.01.2022, 15:29
FoxyFall, если оперировать понятиями тёмный/светлый, то можно найти яркость пикселя Y по какой-либо популярной формуле, например, Y = 0,299*R + 0,587*G + 0.114*B, и уже смотреть только яркость. Либо просто усреднить значения трёх компонент RGB и это рассматривать, как яркость. Значения будут от 0 до 255.
Есть смысл попробовать эти варианты.

Добавлено через 7 минут
Если сравнивать 32 битные значения, как изначально, то по сути сравнение идёт только по красному каналу, а остальные не влияют.
0
 Аватар для snake32
3590 / 1720 / 236
Регистрация: 26.02.2009
Сообщений: 8,713
Записей в блоге: 5
13.01.2022, 14:04
Цитата Сообщение от FoxyFall Посмотреть сообщение
для сравнения темный/не темный использую такую шкалу
Может попробовать сравнивать пиксели не в RGB пространстве, а именно в HSL?
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
13.01.2022, 16:26  [ТС]
snake32, мою программу можно как-то адаптировать к такому?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
13.01.2022, 16:42
Я, наверное, длинно пишу. То же самое я уже предлагал вчера Замена цвета пикселя с условием равенства/неравенства другому цвету
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
13.01.2022, 17:04  [ТС]
AzAtom, нет, не длинно. Просто вчера я еще как-то пыталась найти решение, чтобы сохранить свою модель, а сегодня устала подбирать диапазон и открыта для других идей

Плюс, HSL и HSV немного отличаются между собой. Если с первой я знакома, потому что использовала эти шкалы для поиска диапазона, то вторая – неизведанная земля для меня
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
13.01.2022, 17:37
FoxyFall, ты проигнорировала просьбу предоставить больше деталей, что конкретно тебе нужно реализовать.
Предоставленный образец изображения подсказывает, что задача определённо сложнее описанных сравнений цвета. Очень похоже на попытку получить подсказку для изначально неверного подхода. AzAtom показал очень хороший и наглядный пример изображения, где два абсолютно одинаковых цвета в реальности сильно разные и простым сравнением об этом не узнать.
Какие реально действия нужно автоматизировать работая с этими снимками? Нужно автоматически что-то разметить или помочь/упростить работу пользователя? Цвет несёт какую-либо важную информацию или важны только детали изображения? Характеристики объектов на снимке возможно описать формально или решение принимается пользователем? Ну и т.д. и т.п.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
13.01.2022, 17:53  [ТС]
x128, просто больше информации действительно нет

Передо мной была поставлена ​​задача: изготовить образцы с новой рецептурой, исследовать их и подправить рецептуру

Исследование нужно провести в делфи. И все, что у меня есть, это идея руководителя: просканировать каждый пиксель, сравнить с диапазоном, заменить недиапазонные пиксели. А дальше веселее. Если удастся найти агломераты, портящие мою работу, то их тут же прорисовать с помощью геометрических фигур, допустим треугольников, и измерить размер

Все это время я пыталась придерживаться идеи руководители, поэтому так упорствовала и пыталась как-то реанимировать эту идею
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
13.01.2022, 18:39
Цитата Сообщение от FoxyFall Посмотреть сообщение
вторая – неизведанная земля для меня
Принцип примерно похож.
Но я больше склоняюсь, чтобы найти просто яркость и уже её изучать. Судя по картинке сам цвет тут не важен.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
13.01.2022, 18:59  [ТС]
AzAtom, но от микроскопа есть затемненная зона и определенные недостатки линзы, они не будут сильно влиять на результаты?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.01.2022, 18:59

Поиск пикселя по цвету в Bitmap
Нужно найти координаты пикселя в некоторой области по цвету. Пробовал использовать GetPixel, но получается нереально долго. Решил искать...

Ищем координару пикселя по цвету и сохраняем в таблицу.
Уважаемые программисты, нужно реализовать проект описанный ниже на Builder 6... В С++ не соображаю, выручает только самоучитель. Пробовал...

НЕ ПОНИМАЮ. Поиск координаты пикселя на изображении по его цвету
Есть изображение. На нем нарисована черная линия. Нужно по вертикали зеркально отобразить эту линию относительно ее конца. Просто...

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

Join c условием одновременного равенства
Есть табличка, в которой хранится информация. Первичный ключ uid, вторая ссылается на нее через этот uid, и там есть цифровое поле...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru