С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/68: Рейтинг темы: голосов - 68, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 12

Яркость пикселей

30.04.2014, 22:10. Показов 14942. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер форумчане. Необходимо реализовать пространственный сглаживающий фильтр с шириной окна 3. Для этого загружаемое изображение представляется в виде матрицы MxN, где элементы матрицы - яркость пикселей. Так вот, суть вопроса - что такое яркость пикселя? Как я понимаю Canvas->Pixels[x][y] находит лишь цвет конкретного пикселя или это одно и то же? Написал программу используя Canvas->Pixels[x][y], но по-моему получилась ерунда. Для примера прикреплю результат работы программы, просьба сказать, бред это или нет, ибо я понятия не имею, что такое пространственный сглаживающий фильтр и как должен выглядеть результат)
Результат - http://gyazo.com/a1e5246c79405218cc6d7be5b710c137
Исходное изображение - http://gyazo.com/18fb13de086753589247830dc8dc160a
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.04.2014, 22:10
Ответы с готовыми решениями:

Яркость пикселя
Добрый день! Как можно получить яркость пикселя черно-белой картинки в Builder C++? Спасибо!

Яркость монитора
Добро всем :senor: Подскажите как программно управлять яркостью монитора? если тема обсуждалось можно ссылочку. :yes:

Яркость, контрастность и насыщенность в RGB
Чтобы увеличить/уменьшить яркость, надо R, G и B увеличивать/уменьшать на одинаковую величину. А как увеличить/уменьшить контрастность и...

33
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
30.04.2014, 22:39
Цвет каждого пикселя должен просто стать темнее, я полагаю. Пропорции rgb не должны измениться, а должны уменьшиться значения по каждому из каналов.
1
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
30.04.2014, 22:41
Отрыл у себя в бакапах проект, где использовал яркость пиксела вот одна из функций
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
//---------------------------------------------------------------------------
bool wj_BMP_to_BRIGHT_BlackAndWhite_byte(Graphics::TBitmap *bmp, BYTE level)
{
    int bmp_width = bmp->Width;
    int bmp_height = bmp->Height;
 
    bmp->PixelFormat = pf24bit;
 
    BYTE *col;
    BYTE bright;
    BYTE r, g, b;
 
    // v2
    for(int y = 0; y < bmp_height; y++)
    {
        col = (BYTE *)bmp->ScanLine[y]; // RGB -> BGR
        for(int x = 0; x < bmp_width * 3; x += 3)
        {
            b = col[x+0]; // B
            g = col[x+1]; // G
            r = col[x+2]; // R
 
            bright = (((r * 77) + (g * 151) + (b * 28)) >> 8); // вот так яркость пиксела получить можно
 
            // то что ниже можно не использовать, это для моей реализации
            if(bright >= level)
            {
                bright = 255;
                col[x+0] = bright; //b
                col[x+1] = bright; //g
                col[x+2] = bright; //r
            }
            else
            {
                bright = 0;
                col[x+0] = bright; //b
                col[x+1] = bright; //g
                col[x+2] = bright; //r
            }
        }
    }
    return 1;
}
//---------------------------------------------------------------------------
3
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 12
01.05.2014, 00:26  [ТС]
Gremlin, не подскажете, почему идет умножение на 77, 151 и 28, просто разобраться на будущее?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.05.2014, 23:52
C++
1
2
3
4
5
6
    int Color= ColorToRGB(clRed);
    BYTE r= GetRValue(Color);
    BYTE g= GetGValue(Color);
    BYTE b= GetBValue(Color);
 
   TColor Color2= TColor(RGB(r,g,b));
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
02.05.2014, 00:57
Я в инете увидел следующую формулу яркости пикселя:
C++
1
bright = 0.299*r + 0.587*g + 0.114*b;
Интересует, как из неё была получена (как в примере у Gremlin):
C++
1
bright = (r * 77 + g * 151 + b * 28) >> 8;
Подзабыл математику
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,012
02.05.2014, 01:25
Приблизительно так: умножили на число, а потом с помощью побитого сдвига от множителя избавляемся.
Стопроцентной точности нет, но погрешность не сильно большая.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
02.05.2014, 09:31
Цитата Сообщение от gunslinger Посмотреть сообщение
умножили на число, а потом с помощью побитого сдвига от множителя избавляемся.
я сразу не понял, на какое число. нужно на число, кратное двум.
и чем больше число, тем больше точность.

Вот, кстати, пример сделал (может кому-нибудь будет полезен):
C++
1
2
3
4
5
6
7
8
9
10
11
12
        int r = 10, g = 56, b = 17, bright;
 
        bright = 0.299*r + 0.587*g + 0.114*b; // начальная формула
        ShowMessage(bright);
 
        int to4nost = 8; // по умолчанию точность 8, из-за этого и сдвиг на 8 бит
        int rk = RoundTo(0.299 * pow(2, to4nost), 0);
        int gk = RoundTo(0.587 * pow(2, to4nost), 0);
        int bk = RoundTo(0.114 * pow(2, to4nost), 0);
 
        bright = (rk*r + gk*g +bk*b) >> to4nost;
        ShowMessage(bright);
0
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 12
02.05.2014, 12:28  [ТС]
Спасибо за ответы, но теперь, собственно, возник еще один вопрос - как присвоить пикселю новую яркость? Как я понимаю, нужно сначала разложить всю картинку на RGB составляющие, а затем перевести это в YUV составляющие
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Graphics::TBitmap *LoadedBmp = new Graphics::TBitmap;
char *col, y, u, v, sum=0, r, g, b;
int  bmp_height, bmp_width;
LoadedBmp->LoadFromFile("q.bmp");             // Загруженное изображение
Image1->Picture->Bitmap=LoadedBmp;
bmp_height=Image1->Picture->Bitmap->Height;   // Высота картинки
bmp_width=Image1->Picture->Bitmap->Width;     // Ширина картинки
LoadedBmp->PixelFormat=pf24bit;
for (int k=0;k<bmp_height;k++)
        {
        col=(char*)LoadedBmp->ScanLine[k];
        for (int i=0;i<bmp_width3;i+=3)
                {
                r=col[i];
                g=col[i+1];
                b=col[i+2];
                y=0.299*r+0.587*g+0.114*b;
                u=-0.14713*r-0.28886*g+0.436*b+128;
                v=0.615*r-0.51499*g-0.10001*b+128;
Яркость должна изменятся по закону http://gyazo.com/0b3ed9ffe8754f9655a01954b94ae53b, где R=3.
То есть код будет выглядеть вот так
C++
1
2
3
4
5
6
7
8
for (int a=i-1;a<i+1;a++)
                        {
                        for (int b=k-1;a<k+1;b++)
                                {
                                sum=sum+y;
                                }
                        }
y=sum/9;
Далее вновь переходим к RGB составляющим:
C++
1
2
3
r=y+1.13983*(v-128);
g=y-0.39465*(u-128)-0.58060*(v-128);
b=y+2.03211*(u-128);
И теперь вопрос: как правильно перейти от RGB составляющих к цвету пикселя?
Если сделать так, то программа попросту зависает:
C++
1
LoadedBmp->Canvas->Pixels[i/3][k]=(RGB(r,g,b));
Полный код
Кликните здесь для просмотра всего текста

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
{
Graphics::TBitmap *LoadedBmp = new Graphics::TBitmap;
char *col, y, u, v, sum=0, r, g, b;
int  bmp_height, bmp_width;
TCanvas*Canvas=Image1->Picture->Bitmap->Canvas;
LoadedBmp->LoadFromFile("q.bmp");             // Загруженное изображение
Image1->Picture->Bitmap=LoadedBmp;
bmp_height=Image1->Picture->Bitmap->Height;   // Высота изображения
bmp_width=Image1->Picture->Bitmap->Width;     // Ширина изображения
LoadedBmp->PixelFormat=pf24bit;
for (int k=0;k<bmp_height;k++)
        {
        col=(char*)LoadedBmp->ScanLine[k];
        for (int i=0;i<bmp_width3;i+=3)
                {
                r=col[i];
                g=col[i+1];
                b=col[i+2];
                y=0.299*r+0.587*g+0.114*b;
                u=-0.14713*r-0.28886*g+0.436*b+128;
                v=0.615*r-0.51499*g-0.10001*b+128;
                for (int a=i-1;a<i+1;a++)
                        {
                        for (int b=k-1;a<k+1;b++)
                                {
                                sum=sum+y;
                                }
                        }
                y=sum/9;
                r=y+1.13983*(v-128);
                g=y-0.39465*(u-128)-0.58060*(v-128);
                b=y+2.03211*(u-128);
                LoadedBmp->Canvas->Pixels[i/3][k]=(RGB(r,g,b));
                }
        }
}
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
02.05.2014, 14:20
Цитата Сообщение от hanroberto Посмотреть сообщение
y=0.299*r+0.587*g+0.114*b;
u=-0.14713*r-0.28886*g+0.436*b+128;
v=0.615*r-0.51499*g-0.10001*b+128;
Цитата Сообщение от hanroberto Посмотреть сообщение
r=y+1.13983*(v-128);
g=y-0.39465*(u-128)-0.58060*(v-128);
b=y+2.03211*(u-128);
Лучше эти строки переведи в такой вид, как у Gremlin, потому как проц выражения с целыми числами быстрее вычисляет, чем с действительными числами. Возможно из-за этого и зависает программа.

Цитата Сообщение от hanroberto Посмотреть сообщение
LoadedBmp->Canvas->Pixels[i/3][k]=(RGB(r,g,b));
эта строчка по-моему тоже долго будет вычисляться, посмотри как у Gremlin реализовано, у него сразу в col записывается
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.05.2014, 14:43
Вечно вы любите велосипеды писать:

http://docwiki.embarcadero.com... orRGBToHLS
http://docwiki.embarcadero.com... orHLSToRGB
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
02.05.2014, 15:46
Цитата Сообщение от Avazart Посмотреть сообщение
Вечно вы любите велосипеды писать: http://docwiki.embarcadero.com... orRGBToHLS http://docwiki.embarcadero.com... orHLSToRGB
Это вообще не то

Добавлено через 18 минут
Тут тема про цветовую модель YUV
0
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 12
02.05.2014, 15:55  [ТС]
Я дурак, ошибся в одной буковке и поэтому программа зависала Сейчас вроде работает, по крайней мере яркость действительно меняется.
Оригинал http://gyazo.com/e634b99f926a17940013cd92ac6c3549
Результат http://gyazo.com/df3ff2a7c7dceafc49cd42300a9dfc9a
Я правда не знаю, правильный ли это результат, так как сталкиваюсь с фильтрами впервые) Если кто-нибудь знает, отпишитесь, похоже ли это на правду.
Исправленный код
Кликните здесь для просмотра всего текста
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
{
Graphics::TBitmap *LoadedBmp = new Graphics::TBitmap;
char *col, y, u, v, sum=0, r, g, b;
int  bmp_height, bmp_width;
TCanvas*Canvas=Image1->Picture->Bitmap->Canvas;
Image1->Picture->Bitmap->Width=Image1->Picture->Width;
Image1->Picture->Bitmap->Height=Image1->Picture->Height;
Image1->AutoSize = false;
Image1->Stretch = true;
LoadedBmp->LoadFromFile("q1.bmp");            
Image1->Picture->Bitmap=LoadedBmp;
bmp_height=Image1->Picture->Bitmap->Height;   // Высота изображения
bmp_width=Image1->Picture->Bitmap->Width;     // Ширина изображения
LoadedBmp->PixelFormat=pf24bit;
for (int k=0;k<bmp_height;k++)
        {
        col=(char*)LoadedBmp->ScanLine[k];
        for (int i=0;i<bmp_width*3;i+=3)
                {
                r=col[i];
                g=col[i+1];
                b=col[i+2];
//              Переходим от RGB модели к YUV модели
                y=(77*r+151*g+28*b)>>8;
                u=(-38*r-74*g+113*b+32768)>>8;
                v=(0157*r-133*g-27*b+32768)>>8;
                for (int a=i-1;a<i+1;a++)
                        {
                        for (int b=k-1;b<k+1;b++)
                                {
                                sum=sum+y;
                                }
                        }
                y=(sum/9);
                sum=0;
//              Переходим от YUV модели к RGB модели
                r=(256*y+292*(v-128))>>8;
                g=(256*y-100*(u-128)-148*(v-128))>>8;
                b=(256*y+512*(u-128))>>8;
                col[i]=r;
                col[i+1]=g;
                col[i+2]=b;
                }
        }
Image1->Picture->Bitmap=LoadedBmp;
Image1->Picture->Bitmap->SaveToFile("result.bmp");
}
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
02.05.2014, 15:59
Цитата Сообщение от hanroberto Посмотреть сообщение
Я правда не знаю, правильный ли это результат
для этого знать, что такое пространственный сглаживающий фильтр с шириной окна 3.
есть где прочитать?
0
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 12
02.05.2014, 16:09  [ТС]
kzru_hunter, Отклик простейшего линейного пространст*венного фильтра представляет собой среднее значение элементов окрестности, по*крытой маской фильтра. Такие фильтры называются усредняющи*ми или сглаживающими. За*меной исходных значений элементов изображения на средние значе*ния по маске фильтра достигается уменьшение изменений яркости. Как следствие, таким способом решаются следующие задачи:

Походу хрень, а не программа у меня Буду переделывать
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
02.05.2014, 18:44
kzru_hunter, вы правы, я использую именно эту формулу (0.299*r + 0.587*g + 0.114*b) ... нужна предистория:
Я решил написать бота для игры, бот графический (этот код по для определения яркости нужен для распознования текста), мой первый вариант был BMP->Pixels[x][y], но производительность была низкой, потом мне подсказали что лучше использовать ScanLine, производительность выросла, но мне этого все равно не хватало, и потом подсказали такой вот примерчик "(((r * 77) + (g * 151) + (b * 28)) >> 8);", еще несколько возрасла производительность

т.е. эти 2 формулы идентичны

Тот кусок кода, который я предложил (мне помогали его ускорить)
1) Работает быстрее
2) При повторном проходе не путается, и не делает изображение темнее с каждым последующим проходом

gunslinger - ответил правильно, из за того, что байт это целое число, оно не особо дружит с дробными, числами, из за этого и идут погрехи

http://pasteboard.co/2zbwWeyr.png

100 проходов
справа: со смещением на 8 бит
слева: функция из вики
в Edit'ах под ними время выполнения



http://pasteboard.co/2zbL0iJa.jpg - полноразмерный оригинал, для теста сжимал картинку иначе долго обрабатывалось бы))))
0
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 12
02.05.2014, 20:24  [ТС]
Можете объяснить, почему происходит следующее:
есть 2 переменные типа byte - sum и Y.
Вставляю в программный код 2 строчки:
sum=Y+Y+Y;
Y=sum/3
По сути, ничего не должно изменится, но картинка очень сильно искажается, меняются цвета.
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
02.05.2014, 22:02
Если sum - BYTE то все немного проясняется,
Например Y = 123
C++
1
2
3
4
BYTE sum;
BYTE Y = 123;
sum = 123 + 123 + 123
// sum будет равен 113
Вы воспользовались... эм.... "переполнением буфера"... 1 байт это значения: от 0 до 255 включительно, и если:
255 + 1 то будет 0
255 + 2 = 1
255 + 3 = 2
...
255 + 255 = 254
1
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
03.05.2014, 13:35
Цитата Сообщение от hanroberto Посмотреть сообщение
Необходимо реализовать пространственный сглаживающий фильтр с шириной окна 3. Для этого загружаемое изображение представляется в виде матрицы MxN, где элементы матрицы - яркость пикселей.
Это в задании написано, что элементы матрицы - яркость пикселей? Так-то у фильтра задача - усреднение самих пикселей, а не их яркостей.

Добавлено через 45 минут
Если нужно усреднить пиксели исходного изображения, то можно просто найти среднее арифметическое RGB составляющих каждого пикселя в окне 3x3:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <Graphics.hpp>
#include <Jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
void MyFilter(Graphics::TBitmap *source, Graphics::TBitmap *dest);
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        // исходное изображение
        TPicture *pic = new TPicture;
        pic->LoadFromFile("1.jpg");
 
        // src_bmp
        Graphics::TBitmap *src_bmp = new Graphics::TBitmap;
        src_bmp->Assign(pic->Graphic); // если в pic загружено jpeg, то здесь это изображение будет в bitmap формате
 
        // dest_bmp
        Graphics::TBitmap *dest_bmp = new Graphics::TBitmap;
        dest_bmp->Width = src_bmp->Width;
        dest_bmp->Height = src_bmp->Height;
 
        // применяем фильтр
        MyFilter(src_bmp, dest_bmp);
 
        // сохраняем результирующий bitmap
        dest_bmp->SaveToFile("2.bmp");
}
//---------------------------------------------------------------------------
 
 
void MyFilter(Graphics::TBitmap *source, Graphics::TBitmap *dest)
{
        int iWidth = source->Width;
        int iHeight = source->Height;
 
    // выделяем память под DIB (в нашем случае под оригинальную картинку)
    HANDLE hDIBSource = GlobalAlloc(0, 4*iWidth*iHeight);
    byte *pSource = (byte*)GlobalLock(hDIBSource);
 
        // BITMAPINFOHEADER
    BITMAPINFOHEADER   bi;
        bi.biSize = sizeof(BITMAPINFOHEADER);
    bi.biWidth = iWidth;
    bi.biHeight = iHeight;
    bi.biPlanes = 1;
    bi.biBitCount = 32;
    bi.biCompression = BI_RGB;
    bi.biSizeImage = 0;
    bi.biXPelsPerMeter = 0;
    bi.biYPelsPerMeter = 0;
    bi.biClrUsed = 0;
    bi.biClrImportant = 0;
        // копирует пиксели оригинальной картинки в DIB
    GetDIBits(source->Canvas->Handle, source->Handle, 0, iHeight, pSource, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
 
        
    // выделяем память под Dest DIB
        HANDLE hDIBDest = GlobalAlloc(0, 4*iWidth*iHeight);
    byte *pDest = (byte*)GlobalLock(hDIBDest);
 
        // к исходному изображению применяем фильтр и сохраняем в результирующем изображении
    for ( int k = 0; k < iHeight; k++ ) // проходим каждую строку изображения
    {
            for ( int x = 0; x < iWidth; x++ ) // проходим каждый пиксель в текущей строке изображения
                {
                        // сглаживающий однородный усредняющий фильтр с шириной окна 3
                        int sum_r = 0, sum_g = 0, sum_b = 0, count_rgb = 0;
                        for ( int b = k-1; b <= k+1; b++ )
                        {
                                if (b < 0 || b >= iHeight) continue;
 
                                for ( int a = x-1; a <= x+1; a++ )
                                {
                                        if (a < 0 || a >= iWidth) continue;
 
                                        byte *pixel = pSource + 4*(b*iWidth + a);
 
                                        sum_r += pixel[2];
                                        sum_g += pixel[1];
                                        sum_b += pixel[0];
 
                                        count_rgb++;
                                }
                        }
 
                        sum_r /= count_rgb;
                        sum_g /= count_rgb;
                        sum_b /= count_rgb;
 
                        byte *pDestPixel = pDest + 4*(k*iWidth + x);
                        pDestPixel[2] = sum_r;
                        pDestPixel[1] = sum_g;
                        pDestPixel[0] = sum_b;
        }
    }
 
        // копируем биты на результирующий битмап
        SetDIBitsToDevice(dest->Canvas->Handle, 0, 0, iWidth, iHeight, 0, 0, 0, iHeight, pDest, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
 
        // освобождаем память, выделенную под DIB'ы
        GlobalUnlock(hDIBDest);
        GlobalUnlock(hDIBSource);
        GlobalFree(hDIBDest);
        GlobalFree(hDIBSource);
}
По-моему, результат будет тот же самый, как если бы усреднять яркости пикселей. У себя проверял - разницы не нашёл, но при этом с яркостью пикселей много гемора прибавляется (в результирующем изображении появляются зеленые, красные, синие точки в черных областях изображения). Как я понял, это из-за того, что изменение какой либо составляющей YUV может повлечь выход за диапазон принимаемых значений при переводе из YUV в RGB самих составляющих RGB:
допустим R=255,G=255,B=0, тогда Y=225.93, U=16.82255, V=25.50255
меняем Y на 10, тогда R= -106,8296684335 <- выход за диапазон принимаемых значений
Миниатюры
Яркость пикселей   Яркость пикселей  
Вложения
Тип файла: rar test filter.rar (301.8 Кб, 22 просмотров)
1
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 12
03.05.2014, 20:33  [ТС]
kzru_hunter, да, в самом задании сказано, что необходимо составить матрицу яркостей пикселей. В изображении действительно появляется огромное количество красных, синих, зеленых точек, не знаете, как от них избавится?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.05.2014, 20:33
Помогаю со студенческими работами здесь

При изменении значения ползунка, изменять яркость рисунка
Здравствуйте, скажите, пожалуйста, как сделать программу, в которой при изменении значения ползунка, будет изменятся яркость рисунка,...

Поиск пикселей в изображении
В общем ситуация такая: нужно получить скрин экрана и найти координаты пикселей определённого цвета, к примеру белого. И это должно...

Координаты пикселей и цвет
Привет, есть изображение, два двухмерных массива, массива типа int и string. Начиная с верхнего левого угла изображения, записать...

Считывание пикселей в игре
Всем добрый день. Загорелся идеей сделать следущее: программу, которая в популярной игре CS 1.6 будет сканировать игровую область и при...

Поиск пикселей в изображении
Реализовал поиск в изображении через Image1-&gt;Canvas-&gt;Pixel Но проблема в том, что такое поиск занимает очень много времени... Есть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru