일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- python list
- 딥러닝
- c언어
- Convolution Neural Network
- word embedding
- 이미지 생성
- object detection
- 완전탐색
- #opencv
- #일상영어
- #Android
- keras
- #English
- python 알고리즘
- #프로젝트
- tensorflow update
- tokenizing
- findContours
- #실생활영어
- text2img
- 영어명언
- #영어 명언
- #영어
- TensorFlow
- #1일1영어
- convexhull
- python __init__
- opencv SURF
- 영어
- #실생활 영어
- Today
- Total
When will you grow up?
17.Gamma correction (감마 보정) 본문
Gamma correction
"모든 모니터들은 실제 모니터로 보내지는 영상 정보보다 어둡게 보여준다" 에서 출발된다.
잘나와있는곳 : 클릭
모니터 마다 모두 차이는 존재.
모니터로 보내지는 영상 정보가 예를 들어 R,G,B 값으로 0.5, 0.5, 0.5 라고 하면 정확히 중간 값의 회색이 화면에 보여져야 하는데 실제로 눈으로 느끼는 것은 중간 보다 좀 더 어둡게 보인다는 이야기입니다.
때문에 모니터로 보내는 영상의 값을 좀 더 높게 보내면 원래 보여주고자 하는 영상을 보여줄수 있습니다. 예를 들어, 0.8, 0.8, 0.8 을 모니터에 보여주려고 하면 눈으로 느껴지는 것은 0.5, 0.5, 0.5 가 된다는 것입니다.
계산 공식이 여러가지로 많이 있는데 일반적으로 다음과 같은 공식을 사용합니다.
(보여주고자 하는 값) ^ (1.0/2.2)
여기에서 2.2 라는 값을 흔히 Gamma 값 이라고 합니다. Gamma 값은 2.2 이 가장 근접한 값으로 알려져있는데, 그냥 2.0 을 사용하는 것이 연산 속도가 빠른 관계로 2.0 을 사용하는 경우도 많습니다.
감마콜렉션 opencv 를 이용하여 구현하기
결과
원본,감마값0.5/1.0/1.5/2.0
핵심 코드입니다.
void GammaCorrection(Mat& src, Mat& dst, float fGamma)
{
unsigned char lut[256];
for (int i = 0; i < 256; i++)
{
lut[i] = saturate_cast<uchar>(pow((float)(i / 255.0), fGamma) * 255.0f);
}
dst = src.clone();
const int channels = dst.channels();
switch (channels)
{
case 1:
{
MatIterator_<uchar> it, end;
for (it = dst.begin<uchar>(), end = dst.end<uchar>(); it != end; it++)
*it = lut[(*it)];
break;
}
case 3:
{
MatIterator_<Vec3b> it, end;
for (it = dst.begin<Vec3b>(), end = dst.end<Vec3b>(); it != end; it++)
{
(*it)[0] = lut[((*it)[0])];
(*it)[1] = lut[((*it)[1])];
(*it)[2] = lut[((*it)[2])];
}
break;
}
}
}
'02. Study > Computer Vision(openframworks&opencv)' 카테고리의 다른 글
19.convexHull (0) | 2016.11.07 |
---|---|
18.contour(윤곽,외곽선)찾기 findContours (0) | 2016.11.07 |
16.Canny연산자로 영상 외곽선 검출 (0) | 2016.10.28 |
15.에지를 검출하는 Sobel필터 (0) | 2016.10.28 |
14.Threshold를 이용한 이진 영상 변환 (0) | 2016.10.22 |