Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2015, 21:17   #1
Mr.Dmitry
Пользователь
 
Аватар для Mr.Dmitry
 
Регистрация: 18.12.2006
Сообщений: 50
По умолчанию Обесцвечивание изображения

Здравствуйте, помогите пожалуйста со следующем заданием.

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

Сделал такой код

Код:
private void button2_Click(object sender, EventArgs e)
        {
            Int16 i, j;
            byte Red, Green, Blue;
            Color PixelColor;
            MyImage = new Bitmap(Image.FromFile(MyFileName));
            progressBar1.Visible = true;
            for (i = 0; i < MyImage.Height; i++)
            {
                for (j = 0; j < MyImage.Width; j++)
                {
                    PixelColor = MyImage.GetPixel(j, i);
                    Red = (byte)(PixelColor.R * 0.3);
                    Green = (byte)(PixelColor.G * 0.59);
                    Blue = (byte)(PixelColor.B * 0.11);
                    MyImage.SetPixel(j, i, Color.FromArgb(Red, Green, Blue));
                }
                if (i % 10 == 0)
                    progressBar1.Value = i * 100 / MyImage.Height;
            }
            pictureBox2.Image = MyImage;
            progressBar1.Visible = false;
            button3.Enabled = true;
        }
Но на сколько я понял изображение должно стать черно белым, а у меня оно становиться с приобладающим зеленым цветом (
Mr.Dmitry вне форума Ответить с цитированием
Старый 04.10.2015, 21:35   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Код:
Red = Green = Blue = (byte)(PixelColor.R * 0.3) +  (byte)(PixelColor.G * 0.59) +  (byte)(PixelColor.B * 0.11);
f.hump вне форума Ответить с цитированием
Старый 04.10.2015, 21:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Mr.Dmitry
А ты уверен в правильности своей формулы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2015, 17:28   #4
Mr.Dmitry
Пользователь
 
Аватар для Mr.Dmitry
 
Регистрация: 18.12.2006
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А ты уверен в правильности своей формулы?
Ну раз она делает не то что хотел, то значит не уверен. Коэффициенты 0.3 0.59 и 0.11 нашел в интернете.

Цитата:
Сообщение от f.hump Посмотреть сообщение
Код:
Red = Green = Blue = (byte)(PixelColor.R * 0.3) +  (byte)(PixelColor.G * 0.59) +  (byte)(PixelColor.B * 0.11);
Ваш код не помог (

Последний раз редактировалось Stilet; 06.10.2015 в 09:35.
Mr.Dmitry вне форума Ответить с цитированием
Старый 06.10.2015, 01:55   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Во-первых, по-моему, ваш код это C#, а не С/C++.
Во-вторых, а так?
Код:
Grey = (byte)(PixelColor.R * 0.3 + PixelColor.G * 0.59 + PixelColor.B * 0.11);
MyImage.SetPixel(j, i, Color.FromArgb(Grey, Grey, Grey));
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 06.10.2015 в 02:01.
BDA вне форума Ответить с цитированием
Старый 06.10.2015, 20:08   #6
Mr.Dmitry
Пользователь
 
Аватар для Mr.Dmitry
 
Регистрация: 18.12.2006
Сообщений: 50
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Во-первых, по-моему, ваш код это C#, а не С/C++.
Во-вторых, а так?
Код:
Grey = (byte)(PixelColor.R * 0.3 + PixelColor.G * 0.59 + PixelColor.B * 0.11);
MyImage.SetPixel(j, i, Color.FromArgb(Grey, Grey, Grey));
Да действительно, я обжипься разделом и мой код C# а не С/C++

Спасибо, ваш код работает. Можно последний вопрос? Что означает

Код HTML:
Высокочастотная фильтрация с ядром 3
Mr.Dmitry вне форума Ответить с цитированием
Старый 06.10.2015, 20:20   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

означает, что у тебя где-то в условии должна быть задана матрица фильтра, который нужно применить к картинке.
f.hump вне форума Ответить с цитированием
Старый 06.10.2015, 21:23   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Mr.Dmitry Посмотреть сообщение
Спасибо, ваш код работает. Можно последний вопрос? Что означает

Код HTML:
Высокочастотная фильтрация с ядром 3
Этот вопрос надо задавать тому, кто придумал эту фразу.
1) Написано Не по-русски. Нету такой фразы "Высокочастотная фильтрация" Есть:

Фильтр нижних частот (ФНЧ) — фильтр, эффективно пропускающий
частотный спектр сигнала ниже некоторой частоты (частоты среза), и
уменьшающий (или подавляющий) частоты сигнала выше этой частоты.
Степень подавления каждой частоты зависит от вида фильтра.

Фильтр верхних частот (ФВЧ) — фильтр, пропускающий высокие частоты
входного сигнала, при этом уменьшая или подавляя полностью частоты
сигнала меньше чем частота среза.
Степень подавления зависит от конкретного типа фильтра.
2) С ядром №3 или размера 3?
Сепарабельный фильтр или просто линейно применить?
3) Каким образом задавать параметры фильтра? Они заданы в условии? Или их надо вводить с клавиатуры или расчётно, а если расчётно, то какие проходили?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 06.10.2015, 22:27   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Нету такой фразы "Высокочастотная фильтрация" Есть:
Фильтр нижних частот (ФНЧ)
:. Слышу звон, да не знаю где он. У "высокочастотной фильтрации", есть по крайней мере одна реализация - резонансный контур. Есть ещё полосковые линии, но это уже для СВЧ. У ФНЧ, реализаций куда больше. Паразитные ёмкости и индуктивности практически не влияют.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 07.10.2015, 19:46   #10
Mr.Dmitry
Пользователь
 
Аватар для Mr.Dmitry
 
Регистрация: 18.12.2006
Сообщений: 50
По умолчанию

o0 емае, вот вы меня загрузили тут....
Mr.Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение изображения с ФРАГМЕНТОМ другого изображения egorka2134 Общие вопросы Delphi 8 13.08.2013 19:04
Классы. Чтение и создание .bmp изображения. Пропадает 1 пиксел при создании изображения. s-mumrik Visual C++ 3 12.04.2013 21:21
обесцвечивание изображения с прозрачность CepbIu PHP 2 25.02.2011 01:06
Чтение изображения из базы данных, Вместо изображения - "System.Byte[]" ruelCrow Общие вопросы .NET 3 10.07.2008 23:29
Изображения в БД alikon1 БД в Delphi 3 08.10.2007 13:13