Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/74: Рейтинг темы: голосов - 74, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 17

Выделение контуров на изображении градиентным методом

05.02.2015, 14:10. Показов 15264. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа должна брать исходный файл с изображением и выделять контуры на изображении градиентным методом.Помогите написать программу(ну или часть где будет арифметическое действие с пикселями).Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2015, 14:10
Ответы с готовыми решениями:

Выделение контуров на изображении градиентным методом
Программа должна брать исходный файлик с изображением и выделять контуры на изображении градиентным методом. Не нужно писать всю программу,...

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

Выделение контуров изображения
Добрый день, подскажите пожалуйста, как на андроиде реализовать выделение контуров изображения? Есть ли готовые реализации для обработки...

8
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
05.02.2015, 15:04
Лучший ответ Сообщение было отмечено Ev_Hyper как решение

Решение

C#
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
 
namespace WindowsFormsApplication238
{
    /*!!!!! Unsafe context required !!!!*/
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var ofd = new OpenFileDialog {Filter = "Image file|*.jpg;*.png;*.bmp"};
            if(ofd.ShowDialog() == DialogResult.OK)
            {
                var image = (Bitmap)Bitmap.FromFile(ofd.FileName);
                EdgeDetection(image, 10);
                BackgroundImage = image;
            }
        }
 
        public static void EdgeDetection(Bitmap b, float threshold)
        {
            Bitmap bSrc = (Bitmap)b.Clone();
 
            BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            BitmapData bmSrc = bSrc.LockBits(new Rectangle(0, 0, bSrc.Width, bSrc.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
 
            int stride = bmData.Stride;
 
            unsafe
            {
                byte* p = (byte*)(void*)bmData.Scan0;
                byte* pSrc = (byte*)(void*)bmSrc.Scan0;
 
                int nOffset = stride - b.Width * 3;
                int nWidth = b.Width - 1;
                int nHeight = b.Height - 1;
 
                for (int y = 0; y < nHeight; ++y)
                {
                    for (int x = 0; x < nWidth; ++x)
                    {
                        //  | p0 |  p1  |
                        //  |    |  p2  |
                        var p0 = ToGray(pSrc);
                        var p1 = ToGray(pSrc + 3);
                        var p2 = ToGray(pSrc + 3 + stride);
 
                        if (Math.Abs(p1 - p2) + Math.Abs(p1 - p0) > threshold)
                            p[0] = p[1] = p[2] = 255;
                        else
                            p[0] = p[1] = p[2] = 0;
 
                        p += 3;
                        pSrc += 3;
                    }
                    p += nOffset;
                    pSrc += nOffset;
                }
            }
 
            b.UnlockBits(bmData);
            bSrc.UnlockBits(bmSrc);
        }
 
        static unsafe float ToGray(byte* bgr)
        {
            return bgr[2] * 0.3f + bgr[1] * 0.59f + bgr[0] * 0.11f;
        }
    }
}
1
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 17
05.02.2015, 17:45  [ТС]
Спасибо огромное. А можешь мне скинуть документ весь? А то у меня ошибки выдаёт. Может это у меня программа сама лагает.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
05.02.2015, 17:48
Roli, В свойствах проекта, закладка Build - поставить галочку Allow unsafe code.
1
0 / 0 / 0
Регистрация: 23.06.2014
Сообщений: 17
05.02.2015, 18:11  [ТС]
И у меня последний вопрос. Выдаёт вот такое "Тип "WindowsFormsApplication238.Form1" уже определяет член "Form1" с такими же типами параметров".
И ещё раз спасибо.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
05.02.2015, 18:29
OMG,
WindowsFormsApplication238.zip
1
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 17
13.05.2015, 17:09
Storm23, привет, можешь ли ты описать блоксхему реализации этого метода?
Очень нужна, программа класс, за нее отдельное спасибо.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
13.05.2015, 17:16
k55i, Перебираются все пикселы изображения, считается сумма разностей яркости текущего пиксела, пиксела слева и пиксела снизу: |p0-p1|+|p2-p1|. Если эта величина больше порога - пиксел считается границей и окрашивается в белый цвет, иначе - черный.
1
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 17
13.05.2015, 18:24
Storm23, Благодарю, очень своевременно)

Добавлено через 1 час 1 минуту
Storm23, есть еще один вопрос к тебе, возможно ли написать аналогичную программу, но не для выделения контуров, а для подавления шумов изображения(Гауссовского белого шума)?
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2015, 18:24
Помогаю со студенческими работами здесь

Определение екстремума функции градиентным методом
Помогите, пожалуйста с этим методом. Есть функция F(x)=x^3+x^2+1 , нужно найти минимум , x0=0.1, E=0.01 Вот пытался решать: ...

Решение задач оптимизации градиентным методом
решение задач оптимизации градиентным методом 1) построить линии уровня функций; 2) найти минимум функции f(x,y)= 18х2+12х+15у2+17у+10...

Выделение контуров на основе дескрипторов Фурье
Доброго времени суток! Требуется ваша помощь, уже имеется кусок программы в котором благополучно выделяется контур. % global bin_img ...

Выделение областей на изображении
Добрый день форумчане. Нужно на изображении выделить сам объект и отдельно необходимый мне фон. У кого есть какие соображения?

Выделение объектов на изображении
Столкнулся с проблемой при составлении алгоритма выделения объектов на шаблоне. На шаблоне 3 квадрата черный, белый, серый. С помощью...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru