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

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

30.04.2014, 22:10. Показов 14843. Ответов 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
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 5,986
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
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru