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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Сеня 2007
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 182
#1

Изменение контрастности изображения - C++

07.05.2013, 18:30. Просмотров 833. Ответов 1
Метки нет (Все метки)

Есть задание:
Изменение контрастности изображения, представленного в градациях яркости. Сравнивается значение яркости исходного пиксела с верхним (в) и нижним (н) порогом, если меньше (н), то результирующему пикселу присваивается значение 0, если больше (в) - значение 255, в остальных случаях значения равномерно интерполируются, т.е. область (н,в) исходных значений отображается на (1,254) результирующих (как бы увеличивается динамический диапазон). Строятся спектры исходного и обработанного изображений. Менять пороги, сравнить получающиеся спектры. Попробовать увеличить контрастность сглаженного изображения.
Теперь вопросы:
1)мне нужно получить значение каждого пиксела, с помощью какой функции это можно сделать?
2)Откуда взять нижний и верхний порог? Или мы его сами произвольно задаем?
3)Каким образом происходит интерполяция?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 18:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изменение контрастности изображения (C++):

Изменение контрастности изображения в файле - C++
ребята, выручайте! нужна программа изменения контрастности графического файла. на языке С++, должно быть окошко где открывается картинка, а...

Изменение размера изображения - C++
Всем привет! Помогите написать скрипт изменения размера изображения. Скрипт создания скриншота import System.IO; // increment...

Изменение глубины цвета изображения - C++
сам изучаю C#, но в C# нет такой возможности с *.bmp. Мне нужно изменить глубину цвета *.bmp изображения. Возможно вы можете такое...

Как происходит изменение разрешения изображения (bmp) - C++
Мне нужно изменить разрешение изображения файла bmp, но я не понимаю как выбирается цвет для новых пикселей изображения. Как я понял на...

Изменение байтов изображения, чтобы предотвратить его открытие просмотрщиками - C++
Господа интересует вот , что - берём картинку записываем в неё (не важно , что , но главное картинка не читабельна) , далее когда надо ,...

Изменение параметров изображения в зависимости от положения ползунка (Opencv) - C++
Помогите пожалуйста написать класс, который будет изменять яркость, насыщенность и цветовую гамму изображения в зависимости от положения...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Сеня 2007
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 182
13.05.2013, 19:56  [ТС] #2
Вот что получилось:
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <windows.h>
 
HBITMAP bmp;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
HWND button1, button2, button3, button4, button5, orig;
HDC Hdc;
int rezcolors[3][3];
int newcolors;
 
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
     {
     static char szAppName[] = "Win" ;
     HWND        hwnd ;
     MSG         msg ;
     WNDCLASSEX  wndclass ;
 
     wndclass.cbSize        = sizeof (wndclass) ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
     wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;
 
     RegisterClassEx (&wndclass) ;
 
     hwnd = CreateWindow (szAppName,         // window class name
                    "Smoothing",                 // window caption
                    WS_OVERLAPPEDWINDOW,     // window style
                    CW_USEDEFAULT,           // initial x position
                    CW_USEDEFAULT,           // initial y position
                    600,                    // initial x size
                    600,                    // initial y size
                    NULL,                    // parent window handle
                    NULL,                    // window menu handle
                    hInstance,               // program instance handle
                    NULL) ;                  // creation parameters
 
     ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;
 
     while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
          }
     return msg.wParam ;
     }
 
void gist(int xx)
{
    Rectangle(Hdc,xx-1,350,xx+186,350);
    int r,g,b,spectr,sumspectr,k2;
    for (int x=xx;x<xx+250;x++)
    {
        sumspectr=0;
        for (int y=100;y<350;y++)
        {
            r=GetRValue(GetPixel(Hdc, x, y));
        //  g=GetGValue(GetPixel(Hdc, x, y));
            //b=GetBValue(GetPixel(Hdc, x, y));
            spectr=r;
            sumspectr+=spectr;
        }
        k2=1;
        sumspectr=sumspectr/500;
        for (int q=0;q<sumspectr;q++)
        {
            SetPixel(Hdc, x, 350-k2, RGB(0,0,0));
            k2++;
        }
    }
}
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
     {
     HDC         hdc=GetDC(hwnd);
     PAINTSTRUCT ps ;
     RECT        rect ;
     Hdc=hdc;
     TCHAR buf1[256];
     TCHAR buf2[256];
     char buf111[256];
     int buf11;
     int buf22;
    CharToOem(buf1,buf111);
     buf11=int(buf111);
     buf22=int(buf2);
 
     switch (iMsg)
          {
          case WM_CREATE :
              bmp=(HBITMAP) LoadImage(NULL, "f.bmp", IMAGE_BITMAP,0,0, LR_LOADFROMFILE);
              button1 = CreateWindow ("EDIT","255",SS_CENTER | WS_CHILD | WS_VISIBLE,150,50,150,50,hwnd,NULL,0,NULL);
              button2 = CreateWindow ("BUTTON","перерисовка",WS_CHILD | WS_VISIBLE,300,50,150,50,hwnd,NULL,0,NULL);
              button3 = CreateWindow ("BUTTON","Ввести нижнюю границу",WS_CHILD | WS_VISIBLE,0,0,150,50,hwnd,NULL,0,NULL);
              button4 = CreateWindow ("BUTTON","Ввести верхнюю границу",WS_CHILD | WS_VISIBLE,150,0,150,50,hwnd,NULL,0,NULL);
              button5 = CreateWindow ("BUTTON","гистограмма",WS_CHILD | WS_VISIBLE,300,0,150,50,hwnd,NULL,0,NULL);
              orig = CreateWindow("EDIT","0", SS_CENTER | WS_CHILD | WS_VISIBLE, 0, 50, 150, 50, hwnd, NULL, 0, NULL);
             
              return 0 ;
          
          case WM_COMMAND:
        /*    if (lParam==LPARAM(button1))
              {
                 TCHAR buf1[256];
             GetWindowText(orig,buf1,lstrlen(buf1));
             TCHAR b1[256];
                   GetWindowText(button5,b1,lstrlen(b1));
              }*/
 
              if (lParam==LPARAM(button2))
              {
                  for (int x=1;x<250;x++)
                      for (int y=101;y<287;y++)
                  {
                      newcolors=GetRValue(GetPixel(hdc, x-1, y-1));
                      if(buf11>=newcolors)
                      {
                          SetPixel(hdc, x, y, RGB(0,0,0));
                      };
                      if(buf22<=newcolors)
                      {
                      SetPixel(hdc, x, y, RGB(255,255,255));
                      };
                      if(buf11<=newcolors && buf22>=newcolors)
                      {
                      newcolors=newcolors-buf11;
                      SetPixel(hdc,x,y,RGB(newcolors,newcolors,newcolors));
                      }
                      }       
                                      
              }
              
              if (lParam==LPARAM(button3))
              {
                  GetWindowText(orig,buf1,lstrlen(buf1));
              }
 
              if (lParam==LPARAM(button4))
              {
                   GetWindowText(button1,buf2,lstrlen(buf2));
              }
 
              if (lParam==LPARAM(button5))
              {
                  gist(0);
              }
              return 0;
 
          case WM_PAINT :
               hdc = BeginPaint (hwnd, &ps) ;
               HDC memdc;
               memdc=CreateCompatibleDC(hdc);
               SelectObject(memdc,bmp);
               BitBlt(hdc, 0, 100, 250, 186, memdc, 0, 0, SRCCOPY);
               DeleteDC(memdc);
               EndPaint (hwnd, &ps) ;
               return 0 ;
 
          case WM_DESTROY :
               PostQuitMessage (0) ;
               return 0 ;
          }
 
     return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
     }
Осталось преобразовать TCHAR в int каким образом можно сделать? Пока то что пробовал получалась фигня. Мб еще какие нибудь ошибки кто заметит пишите!

Добавлено через 20 часов 12 минут
Народ помогите кто нибудь сделать преобразование!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 19:56
Привет! Вот еще темы с ответами:

Изменение яркости контрастности изображения. Бинаризация изображения - C++ Builder
Товарищи программисты помогите с разработкой алкоритма для изменеие яркости контрастности изображения, а токже осуществить бинаризацию...

Изменение контрастности изображения - Delphi
procedure Contrast(Bitmap: TBitmap; Value: Integer; Local: Boolean); function BLimit(B: Integer): Byte; begin if B &lt; 0...

Изменение яркости, контрастности, гаммы изображения - Delphi
Все доброго времени суток. Есть Image в который загруженно изображение....как реализовать изменение яроксти, констрасти, гаммы этого...

Изменение контрастности картинок - Matlab
Вечер добрый! Есть проблема с функцией &quot;histeq&quot;! Помогите, пожалуйста, разобраться! Почему-то не работает даже в самом простецком...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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