http://lueseypid.tistory.com/76
임계값(Threshold)
영상 내 픽셀중에서 특정 값보다 큰값을 갖는 픽셀만 남기고 나머지 픽셀은 무시하는 작업이 필요한 경우가있다. 이 경우 OpenCV에서는 cvThreshold()함수를 사용한다.
double cvThreshold( const CvArr* src, //입력영상 CvArr* dst, //출력영상 double threshold, //임계값 double max_value, //최대값 int threshold_type); //임계값 타입 |
임계값타입
THRESH_BINARY
THRESH_BINARY_INV
THRESH_TRUNC
THRESH_TOZERO
THRESH_TOZERO_INV
#include <stdio.h> #include <cv.h> #include <highgui.h>
void sum_rgb(IplImage* src, IplImage* dst) { IplImage* r=cvCreateImage(cvGetSize((src)), IPL_DEPTH_8U, 1); IplImage* g=cvCreateImage(cvGetSize((src)), IPL_DEPTH_8U, 1); IplImage* b=cvCreateImage(cvGetSize((src)), IPL_DEPTH_8U, 1);
cvSplit(src, r, g, b, NULL);
IplImage* s=cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
cvAddWeighted(r, 1./3., g, 1./3., 0.0, s); cvAddWeighted(s, 2./3., b, 1./3., 0.0, s);
cvThreshold(s, dst, 100, 100, CV_THRESH_TRUNC);
cvReleaseImage(&r); cvReleaseImage(&g); cvReleaseImage(&b); cvReleaseImage(&s); }
int main(void) { cvNamedWindow("lueseypid", 1); IplImage* src=cvLoadImage("lueseypid.jpg"); IplImage* dst=cvCreateImage(cvGetSize(src), src->depth, 1); sum_rgb(src, dst);
cvShowImage("lueseypid", dst);
while(1) { if((cvWaitKey(10) & 0x7f)==27) break; }
cvDestroyWindow("lueseypid"); cvReleaseImage(&src); cvReleaseImage(&dst); } |
출력결과
적응형 임계값
주변 픽셀들의 분포를 분석하여 자동으로 임계값을 결정한다. OpenCV에서는 cvAdaptiveThreshold()함수에서 인자값에 따라 두종류의 적응형 임계값방법을 지원한다.
void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C, //CV_ADAPTIVE_THRESH_MEAN_C or CV_ADAPTIVE_THRESH_GAUSSIAN_C int threshold_type=CV_THRESH_BINARY, int block_size=3, double param1=5 ); |
cvAdaptiveThreshold() adaptive_method 인자값에 따라 두종류의 적응형 임계값을 지원한다. 두가지 경우 모두 적응형 임계값
T(x, y)는 픽셀마다 다른값을 갖게 된다. T(x, y)는 각 픽셀 주변 에서 구한 가중치 평균값에서 param1으로 지정되는 상수값을뺀 값으로 결정된다.
adaptive_method :
- CV_ADAPTIVE_THRESH_MEAN_C : 가중치가 모두 동일한 값으로 설정된다.
- CV_ADAPTIVE_THRESH_GAUSSIAN_C : 가중치는 가우시안 함수의 형태로 지정되어 중심쪽의 픽셀에 가중치가 크게 부여된다.
threshold_type : cvThreshold()함수에서 사용되는 값과 동일함(위에 참고)
'차근차근 > OpenCV' 카테고리의 다른 글
외곽선 검출하기 (0) | 2014.08.05 |
---|---|
메모리 스토리지 (0) | 2014.08.05 |
시퀀스(Sequence) (0) | 2014.08.05 |
locality-sensitive-hash algorithm을 이용한 유사이미지 검색 (0) | 2014.08.04 |
[OpenCV] 귀찮은 경고 (Warning) 메세지 숨기기 (0) | 2014.08.04 |