Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Помогите с фильтром Собеля - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Кто может объяснить азы работы с сообщения на примере кнопки http://www.cyberforum.ru/cpp-beginners/thread52057.html
Кто может объяснить азы работы с сообщения. Я отображаю кнопку на экране (консольный режим). Кнопка имеет три состояния, например: enum state_buttom {off_button, on_button, ...
C++ Вычислить функцию sqrt(), разложенную в ряд Тейлора Дано вещественное число Х (|X|<1) и целое число N (>0). Найти значение выражения: 1+X/2-1*(X*X)/(2*4)+1*3*(X*X*X)/(2*4*6)-...+(pow(-1, N-1))*1*3*...*(2*N-3)*(pow(X, N))/(2*4*...*(2*N)) Полученное... http://www.cyberforum.ru/cpp-beginners/thread52042.html
Прокоментировать 2 строки по сортировке C++
Разбираю код быстрой сортировки, вот исходник #include <iostream> using namespace std; //создается шаблнная функция template<class T> // функция принимает аргументы: // массив (так как...
C++ У меня три вопроса
Вопросы такие:1)Как на Visual C++ 2008 произвести переименование папки 2)Как сделать Restart но не своего а чужого приложения.3)Как правильно написать адрес,но не на какой то определенный...
C++ Найти детерминант (определитель) матрицы http://www.cyberforum.ru/cpp-beginners/thread52037.html
Привет всем помогите найти в 2D массиве детерминант:pardon:
C++ Определить количество дней в году Дан номер года (положительное целое число). Определить количество дней в этом году, учитывая, что обычный год насчитывает 365 дней, а высокосный-366. Высокосным считается год, делящийся на 4, за... подробнее

Показать сообщение отдельно
andech
Сообщений: n/a

Помогите с фильтром Собеля - C++

22.09.2009, 20:18. Просмотров 7101. Ответов 4
Метки (Все метки)

Мне нужно написать программу, которая бы обрабатывала изображение по фильтру Собеля(выделение границ на изображении). Вроде всё сделал по формулам, но у меня при обработке изображения выдаёт вот это. При применении фильтра Собеля на это же изображение в GIMP'е получается это.
Если кто-нибудь занимается изображениями помогите пожалуйста. Эту же прогу делал со scanline вместо попиксельного обращения, результат такой же.
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
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include <tchar.h>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
   int GX[3][3], GY[3][3], sumX = 0, sumY = 0, SUM = 0;
    Graphics::TBitmap *img = new Graphics::TBitmap;
    img->LoadFromFile("1.bmp");
 
   GX[3][3] = -1; GX[3][3] = 0; GX[3][3] = 1;
   GX[3][3] = -2; GX[3][3] = 0; GX[3][3] = 2;
   GX[3][3] = -1; GX[3][3] = 0; GX[3][3] = 1;
 
   GY[3][3] =  1; GY[3][3] = 2; GY[3][3] = 1;
   GY[3][3] =  0; GY[3][3] = 0; GY[3][3] = 0;
   GY[3][3] = -1; GY[3][3] = -2; GY[3][3] = -1;
 
    for (int Y = 0; Y < img->Height; Y++) {
        for (int X = 0; X < img->Width; X++) {
            sumX = 0;
            sumY = 0;
            if (Y == 0 || Y == img->Height)
                SUM = 0;
            else if (X == 0 || X == img->Width)
                SUM = 0;
            else {
                for (int I = -1; I <= 1; I++) {
                    for (int J = -1; J <= 1; J++) {
 
                        int piX = J + X;
                        int piY = I + Y;
 
                        COLORREF pixVal = img->Canvas->Pixels[piX][piY];
 
                        int R = GetRValue(pixVal);
                        int G = GetGValue(pixVal);
                        int B = GetBValue(pixVal);
 
                        int NC = (R + G + B) / 3;
 
                        sumX = sumX + (NC) * GX[J + 1][I + 1];
                        sumY = sumY + (NC) * GY[J + 1][I + 1];
                    }
                }
                SUM = sqrt(pow(sumX,2) + pow(sumY,2));
            }
            if (SUM > 255)
                SUM = 255;
            if (SUM < 0)
                SUM = 0;
            int newPixel = SUM;
            COLORREF newPixCol = RGB(newPixel, newPixel, newPixel);
            img->Canvas->Pixels[X][Y] = newPixCol;
        }
    }
    img->SaveToFile("2.bmp");
    return 0;
}
Миниатюры
Помогите с фильтром Собеля   Помогите с фильтром Собеля   Помогите с фильтром Собеля  

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru