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

Матрица скручивания - C++

Восстановить пароль Регистрация
 
Dimon16
14 / 14 / 1
Регистрация: 09.06.2010
Сообщений: 35
23.03.2011, 19:03     Матрица скручивания #1
Вот написал код для матрицы скручивания,но он чего-то работает не для всех фильтров :
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
#pragma once
 
#include "Image.h"
#include "MathHelper.h"
 
 
typedef struct Matrix_3x3
{
    int Mat[3][3];
    int Divisor;
    int Offset;
};
 
void Process_Convolution3x3(IMG * Pic, Matrix_3x3 M)
{
        int TR, TG, TB;
        int R, G, B;
 
        UINT IDX;
 
        for(int Y = 1;Y < Pic -> Height - 1;Y++)
        {
            for(int X = 1;X < Pic -> Width - 1;X++)
            {
                //Обрабатываем квадрат заданый матрицой
                for(int Row = -1;Row < 2;Row++)
                {
                    for(int Item = -1;Item < 2;Item++)
                    {
                        IDX = (((Y + Row) * Pic -> Width) + (X + Item)) * Pic -> BytesPerPixel;
 
                        TR = *(Pic -> Data + IDX + Pic -> R_IDX);
                        TG = *(Pic -> Data + IDX + Pic -> G_IDX);
                        TB = *(Pic -> Data + IDX + Pic -> B_IDX);
 
                        TR *= M.Mat[Item + 1][Row + 1];
                        TG *= M.Mat[Item + 1][Row + 1];
                        TB *= M.Mat[Item + 1][Row + 1];
 
                        R += TR;
                        G += TG;
                        B += TB;
                    }
                }
 
                IDX = (Y * Pic -> Width + X) * Pic -> BytesPerPixel;
 
                R = (R / M.Divisor) + M.Offset;
                G = (G / M.Divisor) + M.Offset;
                B = (B / M.Divisor) + M.Offset;
 
                *(Pic -> Data + IDX + Pic -> R_IDX) = Clamp(R, 0, 255);
                *(Pic -> Data + IDX + Pic -> G_IDX) = Clamp(G, 0, 255);
                *(Pic -> Data + IDX + Pic -> B_IDX) = Clamp(B, 0, 255);
 
                R = 0;
                G = 0;
                B = 0;
            }
        }
}
Объясните пожалуйста в чем тут ошибка?
Работает только для Blur'a и Negativ'a.
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2011, 19:03     Матрица скручивания
Посмотрите здесь:

Матрица C++
Матрица C++
Квадратная матрица А называется ортогональной,если А^T=А^-1. Определить, является ли заданная матрица А(n,n) ортогональной. C++
C++ Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E единичная матрица порядка n
Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) C++
Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) C++
C++ дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не сим

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru