어제보다 나은 내가 되자
적응형 이진화, adaptivethreshold 본문
#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보다 큰 홀수여야한다.
'영상처리' 카테고리의 다른 글
그레이 스케일 영상 확인 (0) | 2020.05.13 |
---|---|
레이블링, connectedComponents와 connectedComponentsWithStats (0) | 2020.05.13 |
이진화, threshold (0) | 2020.05.13 |
히스토그램 역투영을 통한 피부색 영역 검출, calcBackProject (0) | 2020.05.13 |
특정 색상 영역 분할, inRange (0) | 2020.05.13 |
Comments