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

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

Восстановить пароль Регистрация
 
Сеня 2007
2 / 2 / 0
Регистрация: 03.10.2010
Сообщений: 182
07.05.2013, 18:30     Изменение контрастности изображения #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++
Изображения в wxWidgets C++
Открытие Изображения в с++ C++
Поворот изображения C++
считывание изображения C++
Изменение байтов изображения, чтобы предотвратить его открытие просмотрщиками 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 минут
Народ помогите кто нибудь сделать преобразование!!!
Yandex
Объявления
13.05.2013, 19:56     Изменение контрастности изображения
Ответ Создать тему
Опции темы

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