Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
관리 메뉴

어제보다 나은 내가 되자

적응형 이진화, adaptivethreshold 본문

영상처리

적응형 이진화, adaptivethreshold

rudruddl 2020. 5. 13. 17:26
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

void on_trackbar(int pos, void* userdata) {
	Mat src = *(Mat*)userdata;

	int blocksize = pos;
	if (blocksize % 2 == 0)
		blocksize--; // blocksize is possible when odd
	if (blocksize < 3)
		blocksize = 3; // blocksize minimum size

	Mat dst;
	adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, blocksize, 5);
	// threshold = gaussian average - 5

	imshow("dst", dst);
}

int main() {
	Mat src = imread("sudoku.jpg", IMREAD_GRAYSCALE);
	imshow("src", src);
	namedWindow("dst");
	createTrackbar("Block Size", "dst", 0, 200, on_trackbar, (void*)&src);
	waitKey();
	return 0;
}

threshold를 이용하여 이진화를 수행하면 전체의 영역에 해당 임계값이 사용된다.

밝기에 의해 밝고 어두운 부분이 생기면 밝은 영역은 흐려지게된다.

이때 적응형 이진화를 수행하여 블록 내부 픽셀의 평균을 구하고 상수 c를 뺀 임계값을 사용한다.

블록의 크기는 3보다 큰 홀수여야한다.

Comments