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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Кто может объяснить азы работы с сообщения на примере кнопки http://www.cyberforum.ru/cpp-beginners/thread52057.html
Кто может объяснить азы работы с сообщения. Я отображаю кнопку на экране (консольный режим). Кнопка имеет три состояния, например: enum state_buttom {off_button, on_button, mouse_over_batton} // над кнопкой появился курсор мышки state_buttom state = off_button; //создал переменную до цикла Сделал цикл (30-60 кадров в секунду) в котором отображаю кнопку на экране с...
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)) Полученное число является прилиженным значением функции sqrt(1+X) нужно использовать оператор цикла for, начал работать, застрял именно на этом операторе...прошу помощи. http://www.cyberforum.ru/cpp-beginners/thread52042.html
Прокоментировать 2 строки по сортировке C++
Разбираю код быстрой сортировки, вот исходник #include <iostream> using namespace std; //создается шаблнная функция template<class T> // функция принимает аргументы: // массив (так как функция шаблонная, то любого типа массив), и кол-во элементов массива. void quickSortR(T* a, long N)
C++ У меня три вопроса
Вопросы такие:1)Как на Visual C++ 2008 произвести переименование папки 2)Как сделать Restart но не своего а чужого приложения.3)Как правильно написать адрес,но не на какой то определенный диск(А;В;С.),а на тот, на котором установлена система,прим. - ?":\\Documents and Settings\\User\\Мои документы\\...."
C++ Найти детерминант (определитель) матрицы http://www.cyberforum.ru/cpp-beginners/thread52037.html
Привет всем помогите найти в 2D массиве детерминант:pardon:
C++ Определить количество дней в году Дан номер года (положительное целое число). Определить количество дней в этом году, учитывая, что обычный год насчитывает 365 дней, а высокосный-366. Высокосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400. я так понимаю что её надо решать через оператор if но как записать вот это деление на 4,100 и т.д. я не знаю. Прошу помощи в решении.... подробнее

Показать сообщение отдельно
andech
Сообщений: n/a
25.09.2009, 15:00     Помогите с фильтром Собеля
Спасибо за помощь! Действительно что-то я реально с массивами ступил жестоко.
Теперь прога нормально работает даже с 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
61
62
63
64
65
66
67
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include <tchar.h>
#pragma argsused
Graphics::TBitmap *Sobel(Graphics::TBitmap *image);
int _tmain(int argc, _TCHAR* argv[])
{
    Graphics::TBitmap *img = new Graphics::TBitmap;
    img->LoadFromFile("1.bmp");
    Sobel(img)->SaveToFile("2.bmp");
    return 0;
}
 
Graphics::TBitmap *Sobel(Graphics::TBitmap *img) {
    Graphics::TBitmap *returnImage = new Graphics::TBitmap;
    returnImage->SetSize(img->Width, img->Height);
    returnImage->PixelFormat = pf24bit;
    Byte *ptr, *ptrup, *ptrdown, *ptrres, *ptrcur;
    int sumX = 0, sumY = 0;
    short SUM = 0;
 
    int GX[3][3]={{-1, 0, 1},
                 {-2, 0, 2},
                 {-1, 0, 1}};
 
    int GY[3][3]={{ 1, 2, 1},
                 { 0, 0, 0},
                 {-1,-2,-1}};
 
    for (int Y = 1; Y < img->Height - 1; Y++) {
        ptrres = (Byte*)returnImage->ScanLine[Y];
        ptr = (Byte*)img->ScanLine[Y];
        ptrup = (Byte*)img->ScanLine[Y - 1];
        ptrdown = (Byte*)img->ScanLine[Y + 1];
        for (int X = 0; X < 3 * img->Width; X += 3) {
            if (Y - 1 == 0 || Y + 1 == img->Height - 1) SUM = 0;
            else if (X == 0 || X == img->Width - 3) SUM = 0;
            else {
                sumX = 0;
                sumY = 0;
                for (int I = -1; I <= 1; I++) {
                    for (int J = -1; J <= 1; J++) {
                        switch(I) {
                        case -1:ptrcur = ptrup; break;
                        case 0:ptrcur = ptr; break;
                        case 1:ptrcur = ptrdown; break;
                        }
                        int piX = 3 * J + X;
                        int NC = 0.299 * ptrcur[piX + 2] + 0.587 * ptrcur
                            [piX + 1] + 0.114 * ptrcur[piX];
                        sumX = sumX + NC * GX[I + 1][J + 1];
                        sumY = sumY + NC * GY[I + 1][J + 1];
                    }
                }
                SUM = abs(sumX) + abs(sumY);
                if (SUM > 255) SUM = 255;
                if (SUM < 0) SUM = 0;
            }
            SUM = 255 - abs(SUM);
            ptrres[X + 2] = SUM;
            ptrres[X + 1] = SUM;
            ptrres[X] = SUM;
        }
    }
    return returnImage;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru