본문 바로가기

Computer Vision by OpenCV

OpenCV normalize

반응형





ㅇ OpenCV에서 제공하는 함수 중에 normalize( )가 있다.
  - 이 함수는 값들을 새로운 범위로 변환해주는 역할을 한다.
  - 예를 들어, 원래 값들이 1부터 10부터 사이에 있다면, 
  - 이들을 0부터 1사이 값들로 변환한다.
  - 변환 값들은 원래 값에 비례한 크기를 갖게 된다.

ㅇ 아래 프로그램은 원래 값들이 2 ~ 7일 때, 이를 1 ~ 10사이의 값으로 변환하는 예이다.
- 1) 실수형 값 10개가 주어졌을 때 이를 Mat로 만든다.
- 2) normalize함수의 인수로 입력값을 의미
- 3) 출력값을 의미
- 4) 변환방식이 NORM_MINMAX일 때, 변환 최소값
- 5) 변환 최대값
- 6) 변환 방식을 의미한다.


ㅇ 함수 normalize에 의해 변환된 결과는 아래와 같다.
- 변환 전의 원래 데이터이다
- 값들이 2 ~ 7까지의 값들을 갖는다.

- 변환범위가 0 ~ 1일 때의 결과이다.
- 원래 값에서 최소값이었던 2가 변환 후에는 0으로, 
- 최대값이었던 7이 1로 변환된 것을 볼 수 있다.

- 변환범위가 1 ~ 10일 때의 결과이다.
- 원래 값에서 최소값이었던 2가 변환 후에는 1으로, 
- 최대값이었던 7이 10로 변환된 것을 볼 수 있다.


ㅇ normalize를 이용한 예제 프로그래이다.
 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
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
	float data[10] = { 3, 4, 5, 6, 7, 3, 4, 2, 5, 3 };

	Mat m(1, 10, CV_32F, data);

	normalize(m, m, 1.0, 10.0, NORM_MINMAX);

	for (int r = 0; r < m.rows; r++)
	{
		for (int c = 0; c < m.cols; c++)
		{
			printf("%.2f ", m.at<float>(r, c));
		}
	}
	cout << endl;
	
	return 0;
}

  - line 9-11: 1차원배열을 이용하여 Mat 값을 만든다
  - line 13: normalize 수행
  - line 15-19: 변환 후의 값을 출력한다

ㅇ normalize()의 간단한 용도
  - Gray image의 픽셀값의 범위를 조절하여, 이미지를 전체적으로 밝게 할 수 있다.
  - 아래 야경이미지는 전체적으로 어둡다.
  - normalize를 이용해서 픽셀들의 값을 128 ~ 255로 바꾸면, 이미지 전체가 환해지도록 할 수 있다.

- 함수 normalize()를 이용하여
- 위 이미지의 픽셀값들을 128 ~ 255로 변환한 결과


ㅇ 위 결과 관련한 소스코드

 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
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;


int main(int argc, char** argv)
{

	Mat gimage, nimage;
	Mat src = imread("img_osaka_night.jpg");
	resize(src, src, Size(), 0.15, 0.15);

	cvtColor(src, gimage, CV_BGR2GRAY); 

	normalize(gimage, nimage, 128, 255, NORM_MINMAX);

	imshow("Original", gimage);
	imshow("Normalized:128-255", nimage);

	cout << ("Press any key to exit...\n");
	waitKey();

	return 0;
}

  - line 17: 픽셀값을 128 ~ 255로 변환하기 때문에, 전체적으로 환해진다.



반응형