#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
struct FILE_ {
string file_name[3];
Mat src[3];
Mat dst[3];
};
void ex3() {
/*
효과적인 명암비 조절 방식
src(입력영상) 평균밝기를 고려한 명암비 조절.
영상의 평균 밝기 m을 구하여 (m,m)점을 지나는 직선을 변환 함수로 사용
dst(x, y) = saturate(src(x, y) + (src(x, y) - m) * a) // 포화연산 적용된 식.
if src(x, y) == 128 이면 dst(x, y) 결과영상 픽셀값은 128로 고정.됨으로써(128, 128) 지나며 a.에 의해 기울기가 변하는 직선의 방정식
a값을 통해 명암비 조절 가능. - 1 < a < 0.일 경우 기울기가 0~1 직선이 되어 명암비가 낮아진다.
a>0이면 기울기가 1보다 커짐에 따라 명암비를 증가시키게 된다.
*/
FILE_ file{ {"lenna.bmp","columbia.bmp","tiffany.bmp"} };
for (int x = 0; x < 3; ++x) {
file.src[x] = imread(file.file_name[x], IMREAD_GRAYSCALE);
if (file.src[x].empty()) {
cerr << "Img load failed!" << endl;
return;
}
float alpha = 1.0f;
int m = (int)mean(file.src[x])[0]; // [0] 0번째 채널
file.dst[x] = file.src[x] + (file.src[x] - m) * alpha;
if(file.file_name[x]== "tiffany.bmp")
cout << m << endl;
imshow("src", file.src[x]);
imshow("dst", file.dst[x]);
waitKey();
}
}
void ex2() {
/*
주로, 밝은 것과 어두운 것과의 대비
영상 전반이 어둡거나 또는 밝은 픽셀로 구성되면 명암비가 낮다고 말하며, 밝은 영역과 어두운 영역이 골고루 분포된 영상은
명암비가 높다고 말함.
명암비 조절 수식(간단한 방법)
dst(x, y) = saturate(s * src(x,y))
상수 s를 곱함으로써 명암비 조절함.
0<s<1 명암비가 낮아지는 효과
s>1 명암비가 높아지는 효과 //
입력영상 픽셀값 0~128 사이라면 결과 영상에서는 픽셀값이 증가하게 된다. 255 리밋값에 따라 255 값 비율이 높아져 좋지 않은 결과이미지가 나온다.
//tiffany.bmp 에서 명함비가 너무 높아져 좋지 못한 이미지 출력.*/
FILE_ file{ {"lenna.bmp","columbia.bmp","tiffany.bmp"} };
for (int x = 0; x < 3; ++x) {
file.src[x] = imread(file.file_name[x], IMREAD_GRAYSCALE);
if (file.src[x].empty()) {
cerr << "Img load failed!" << endl;
return;
}
double alpha = 1;
file.dst[x] = file.src[x] + (file.src[x] - 128) * alpha;
imshow("src", file.src[x]);
imshow("dst", file.dst[x]);
waitKey();
}
}
void ex1() {
Mat src = imread("lenna.bmp", IMREAD_GRAYSCALE);
if (src.empty()) {
//주로, 밝은 것과 어두운 것과의 대비
cerr << "Image load failed!" << endl;
return ;
}
double alpha = 1.0;
int m = (int)mean(src)[0];
Mat dst = src + (src - m) * alpha;
cout << m << endl;
imshow("src", src);
imshow("dst", dst);
waitKey();
}
int main()
{
//ex1();
//
//ex2 와 ex3의 차이를 알아보자
//ex2();
ex3();
}
'프로그래머스 > OPENCV' 카테고리의 다른 글
(4-2) 히스토그램분석 (0) | 2022.12.02 |
---|---|
(4) 히스토그램분석 (0) | 2022.12.01 |
영상의 밝기조절(2) (3) | 2022.12.01 |
영상의 밝기 조절(1) (0) | 2022.12.01 |
2-5 유용한 OpenCV 기능 (0) | 2022.12.01 |