일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- word embedding
- text2img
- TensorFlow
- object detection
- c언어
- #1일1영어
- convexhull
- #영어 명언
- #opencv
- 이미지 생성
- #실생활 영어
- keras
- #영어
- 딥러닝
- 완전탐색
- python 알고리즘
- opencv SURF
- #English
- tensorflow update
- Convolution Neural Network
- python __init__
- python list
- #프로젝트
- findContours
- #Android
- tokenizing
- #실생활영어
- #일상영어
- 영어명언
- 영어
- Today
- Total
When will you grow up?
14.Threshold를 이용한 이진 영상 변환 본문
Threshold
이진 영상 변환을 시킬수 있다. 어떤 영상내에서 화소값들의 특성을 서로 양분하는 하나의 경계화소값을 찾아주는 역할을 한다. 즉 영상 전체적인 특성을 둘로 나누는 경계값을 찾는다는 의미입니다.
opencv 에서 제공되는 threshold사용방법
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)//입력영상,결과영상,선택된 경계 값, 수행하려는 경계화 타입으로 maxval의미를조절
타입 dst(x,y)
THRESH_BINARY -> src(x,y)가 thresh보다 더 크면 maxval 아니면 0
THRESH_BINARY_INV-> src(x,y)가 thresh보다 더 크면 0 아니면 maxval
THRESH_TRUNC -> src(x,y)가 thresh보다 thresh 아니면 src(x,y)
THRESH_TOZERO -> src(x,y)가 thresh보다 src(x,y) 아니면 thresh
THRESH_TOZERO_INV-> src(x,y)가 thresh보다 0 아니면 src(x,y)
특수한 값인 THRESH_OTSU는 이전 값과 함께 threshold 함수가 경계 값을 자동으로 추정
threshold함수는 영상 전체에 단일 경계 값을 사용하는 반면에,
adaptive thresholding(적응형 경계화)는 각 화소에 대한 다른 경계 값을 추정하며, 입력 영상이 덜 균등하다면(예: 조명이 고르지 않은 영역)은 더 나은 결과를 만든다.
adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)
//얼추 threshold함수와 비슷하지만 thresholdType 파라미터는 THRESH_BINARY 또는 THRESH_BINARY_INV중 하나여야 한다. 이함수는 계산한 이웃의 가중 평균에 상수(c)를 빼서 각 화소에 대한 경계 값을 계산한다.
결과 입니다.
threshold_value : 127
threshold_value : -127
//전역 선언 Mat src1, dst1, adaptDst; int threshold_value, block_size, C; void thresholding(int, void*) { threshold(src1, dst1, threshold_value, 255, THRESH_BINARY); imshow("Thresholding", dst1); } void adaptThreshAndShow() { adaptiveThreshold(src1, adaptDst, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, block_size, C); imshow("Adaptive Thresholding", adaptDst); } void adaptiveThresholding1(int, void*) { static int prev_block_size = block_size; if ((block_size % 2) == 0)//size가 홀수인지 확인 { if (block_size > prev_block_size) block_size++; if (block_size < prev_block_size) block_size--; } if (block_size <= 1) block_size = 3; adaptThreshAndShow(); } void adaptiveThresholding2(int, void*) { adaptThreshAndShow(); } //setup Mat image = imread("223.JPG",0); src1 = imread("444.JPG", 0); dst1 = src1.clone(); adaptDst = src1.clone(); //3개의 창 생성 namedWindow("Source", WINDOW_AUTOSIZE); namedWindow("Thresholding", WINDOW_AUTOSIZE); namedWindow("Adaptive Thresholding", WINDOW_AUTOSIZE); imshow("Source", src1); //트랙바 생성 threshold_value = -127; block_size = 7; C = 10; createTrackbar("threshold", "Thresholding", &threshold_value, 255, thresholding); createTrackbar("block_size","Adaptive Thresholding",&block_size,25,adaptiveThresholding1); createTrackbar("C","Adaptive Thresholding",&C,255,adaptiveThresholding2); //처음으로 연산 수행 thresholding(threshold_value,0); adaptiveThresholding1(block_size, 0); adaptiveThresholding2(C, 0);
-참고 :
책 : OpenCV프로그래밍
OpenCV도큐먼트 : http://opencv.org/documentation.html
'02. Study > Computer Vision(openframworks&opencv)' 카테고리의 다른 글
16.Canny연산자로 영상 외곽선 검출 (0) | 2016.10.28 |
---|---|
15.에지를 검출하는 Sobel필터 (0) | 2016.10.28 |
13_2.형태학 연산으로 영상변환(morphology ->opening(열림) closing(닫힘)) (0) | 2016.10.22 |
13.형태학 연산으로 영상변환(morphology ->erosion(침식) dilation(팽창)) (0) | 2016.10.22 |
11.medianblur 만들기 (0) | 2016.10.16 |