728x90

전체 이미지에 하나의 임계값을 사용하는 threshold함수는 이미지 일부가 어두운 경에는 하나의 임계값을 사용하여

이진화 할때 좋은 결과를 얻기 힘듭니다.

 

적응형 이진화는 이미지를 작은 영역으로 나누어 각 영역별로 다른 임계값을 사용하는 방법입니다.

적응형 이진화를 위해 OpenCV 에서는 adaptive Threshold함수를 제공합니다.

그림에 적응형 이진화를 적용해보면 어두운 부분과 조명이 알맞은 부분에 모두 좋은 이진화 결과를 보여주는 것을 볼수 있습니다.

 

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	// 이미지를 읽어옵니다.
	Mat img_color;
	img_color = imread("test.jpg", IMREAD_COLOR);
	if (img_color.empty())
	{
		cout << "이미지 파일을 읽을 수 없습니다." << endl;
		return -1;
	}

	// 그레이 스케일 이미지로
	Mat img_gray;
	cvtColor(img_color, img_gray, COLOR_BGR2GRAY);

	// 그레이 스케일 이미지에 적응형 이진화를 적용합니다.
	Mat img_binary;
	adaptiveThreshold(img_gray, img_binary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 5, 4);

	//결과 이미지를 보여줍니다.
	imshow("Grayscale", img_gray);
	imshow("binary", img_binary);
	waitKey(0);
}

 

728x90