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

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

10.01.2022, 16:19. Показов 6654. Ответов 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
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
13.01.2022, 19:22
Студворк — интернет-сервис помощи студентам
Вот кое-что изобразил по яркости. Есть ScrollBar для настройки нижнего и верхнего пределов:
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
  ymin := sbMin.Position;
  ymax := sbMax.Position;
...
  x_max := bmSrc.Width-1;
 
  for y := 0 to bmSrc.Height-1 do
  begin
    pbs := bmSrc.ScanLine[y];
    pbd := bmView.ScanLine[y];
    for x := 0 to x_max do
    begin
      // Y = 0,299*R + 0,587*G + 0.114*B
      yy := pbs^[x*3  ]*0.114 + pbs^[x*3+1]*0.587 + pbs^[x*3+2]*0.299;
      if (yy >= ymin) and (yy <= ymax) then begin
        // Элемент в диапазоне - копируем как есть
        pbd^[x*3  ] := pbs^[x*3  ]; // Blue
        pbd^[x*3+1] := pbs^[x*3+1]; // Green
        pbd^[x*3+2] := pbs^[x*3+2]; // Red
      end else begin
        // Элемент вне диапазона - заменить на указанный цвет
        pbd^[x*3  ] := $FF;
        pbd^[x*3+1] := $CC;
        pbd^[x*3+2] := $99;
      end;
    end;
  end;
  Image2.Repaint;
И сам проект тоже. В проекте есть и первоначальный вариант обработки.
Вложения
Тип файла: rar delphi-multimedia thread2932563 Замена пикселей.rar (25.3 Кб, 11 просмотров)
1
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
13.01.2022, 19:25
Цитата Сообщение от FoxyFall Посмотреть сообщение
они не будут сильно влиять на результаты?
Без понятия. Надо пробовать. От вас пока 1 картинка и не очень понятное объяснение того, что нужно получить.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
13.01.2022, 20:11  [ТС]
AzAtom, спасибо. Буду пробовать такой вариант. Радует одно, руководитель уже не прочь изменить подход и убрать, наконец, memo
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
14.01.2022, 17:29
Цитата Сообщение от AzAtom Посмотреть сообщение
В проекте есть и первоначальный вариант обработки.
Я проверил за это время несколько вариантов.
Mean Shift, собель гаусс, лаплас,и пару своих фильтров.
Даже свою кривую реализацию Difference of Gaussians.
Нужно в несколько этапов обрабатывать.
кластеризация K-means даёт интересные результаты...но нужна предобработка

Вот кластеризация с 4-5-6 кластерами,исходник взял с гитхаба давно.
1
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
14.01.2022, 17:35
https://github.com/PieterBoots/Kmeans-
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
15.01.2022, 08:37
FoxyFall
А дайте ещё картинок...
На одной что-то получилось.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
16.01.2022, 12:51  [ТС]
AzAtom, результаты довольно интересные получаются. Но столкнулась с одной проблемой: новое изображение с измененными пикселями слишком мало, чтобы хорошо рассмотреть изменение. Хотела его пропоционально увеличить его, но так выхожу за пределы памяти

Такое вообще возможно, чтобы оставить выходное фото как миниатюру, а то, что меняется, гораздо больше?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
16.01.2022, 13:06
Цитата Сообщение от FoxyFall Посмотреть сообщение
но так выхожу за пределы памяти
Какого размера изображение?

Цитата Сообщение от FoxyFall Посмотреть сообщение
оставить выходное фото как миниатюру, а то, что меняется, гораздо больше?
Масштабировать перед выводом можно.
Сам TImage умеет масштабировать, если включить его параметр Stretch = true и установить нужный размер
Delphi
1
2
3
Image1.Stretch := true;
Image1.Width  := 200;
Image1.Height := 200;
И тогда изображение независимо от настоящего размера отобразится с размерами 200х200 пикселей.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
16.01.2022, 13:38  [ТС]
AzAtom, исходное изображение 320х240. Его хочу оставить на поле без изменений как image1, а image2 с изменениями перерисовать на поле в 1280х960. Но в таком случае scanline не работает, а два огромных изображения не влезут на экран
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
16.01.2022, 13:46
Цитата Сообщение от FoxyFall Посмотреть сообщение
Но в таком случае scanline не работает
Работает.

Цитата Сообщение от FoxyFall Посмотреть сообщение
а два огромных изображения не влезут на экран
Значит, меньше надо сделать. 800х600, например.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
16.01.2022, 14:00  [ТС]
AzAtom, в том и проблема, мне нужно одно большое и одно маленькое изображение, которые между собой связаны

На маленьком исходное изображение, а на большом – после скана и замены
Миниатюры
Замена цвета пикселя с условием равенства/неравенства другому цвету  
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
16.01.2022, 14:10
- Можно это большое изображение отмасштабировать, чтобы вмещалось на экран.
- Можно разместить этот Image на ScrollBox и прокручивать большое изображение.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
16.01.2022, 14:32  [ТС]
AzAtom, вопрос снимается. Спасибо
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
04.02.2022, 21:42
С поста 20 рис…какие же грязные линзы, нет фокуса, дичайшая дисперсия оптики, как микроскоп из китайского пластика. Виньетирование гигантское. Прозрачные объекты не наблюдают в проходящем свете. Никакие цифровые обработки этого не дадут ничего полезного.
Загуглил “наблюдение прозрачных препаратов в микроскоп”
https://ru.wikipedia.org/wiki/... икроскопия

Может как вариант подсвечивать просто сбоку препарат, уйдет фон и увеличиваться детализация прозрачных шариков или что там надо таки не понятно.
С таким микроскопом нужно подсвечивать узкой линией спектра от красного светодиода, а еще лучше может от красной лазерной указки которая без линзы светит на лист бумаги по идее не будет заметной интерференции. Уйдет дисперсия света, увеличиться детализация и контраст.

Что вы тут в итоге распознаете хз…

А нельзя до фото типа подставить листик бумаги и сфоткать весь мусор оптики на белом фоне?

Иван Ежик,
Зачем оставлять затемненный край для обработки? Вырезать область интереса.
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
04.02.2022, 21:49
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Зачем оставлять затемненный край для обработки? Вырезать область интереса
А я не знаю какая это область, разработка секретная и оригинальное фото никто не покажет.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
04.02.2022, 22:08
Цитата Сообщение от Иван Ежик Посмотреть сообщение
не знаю какая это область
Эм…выделить кружок в центре или квадратную область.

Наименьшие искажения в центре изображения, если препарат не живой то пользуйтесь этим. Можно фоткать препарат кусками сдвигая а потом сшить в фотошопе. Иначе это затенение на краях умножит на ноль все ваши классификаторы =).
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
05.02.2022, 01:03  [ТС]
Excalibur921, википедия вещь полезна, но не для спама. Да и где было сказано, мол препарат прозрачный?

Образец можно просветить хоть всеми цветами радуги, но эффекта не будет, потому что используется метка, которая светится только под УФ

На сколько загрязненные линзы не могу сказать. Это не мой микроскоп

Специально для Вас еще раз напишу: можно использовать только среду делфи. Поэтому фотошоп, корелл и тд не вариант
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
05.02.2022, 02:21
Цитата Сообщение от FoxyFall Посмотреть сообщение
но не для спама.
У вас пробелы не только в общих знаниях но и в физике за школьный курс.
Хоть бы почитали для начала что такое спам
https://ru.wikipedia.org/wiki/Спам
Цитата Сообщение от FoxyFall Посмотреть сообщение
Да и где было сказано, мол препарат прозрачный?
Так на фото видны потемнения фона, значит препарат прозрачный.
Цитата Сообщение от FoxyFall Посмотреть сообщение
но эффекта не будет, потому что используется метка, которая светится только под УФ
В радуге какраз и есть ультрафиолет, нужно было не прогуливать школу.
На фото пост 20 ясно видна дисперсия света, это не флуоресцентное фото. Видимо вы понятия не имеете что такое флуоресцентный микроскоп как и дисперсия света
Название: ScreenShot01943.png
Просмотров: 66

Размер: 51.8 Кб
В гугле вбиваете “флуоресцентное фото в микроскоп”
Название: ScreenShot01944.png
Просмотров: 66

Размер: 58.6 Кб
Засим отписываюсь.
0
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 40
11.02.2022, 19:18  [ТС]
AzAtom, из-за засветки на микроскопе функция по яркости работает несколько неправильно. Можно ли адаптировать этот алгоритм под три канала (R, G и B)? Потому что я пробовала и, как обычно, оно совсем перестало работать
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
11.02.2022, 19:23
Цитата Сообщение от FoxyFall Посмотреть сообщение
функция по яркости работает несколько неправильно
яркость слишком просто, цвета да но на уф снимках не работает.
Возможно сочетание цвета+яркость + однородность окраски
не знаю на данный момент как реализовать однородность, кроме как функцию изменения (яркости и цветов) в пространстве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2022, 19:23

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru