|
영상 이진화 |
조 : 3조 |
작성자 : 이동규 | |
작성일 : 2011. 2. 7 | |
제목 : OpenCV를 이용한 영상 이진화 |
1. 프로그램 설명
영상 이진화란 RGB 값으로 다양하게 분포되어 있는 색상 값을 0과 1만의 값으로 표현하는 것 입니다. 실제적으로는 RGB 컬러 영상을 흑백영상으로 바꾼 뒤 특정 임계 값을 기준으로 초과 값은 255로, 이하 값은 0으로 변환시킨다.
Functions |
Substance |
cvThreshold (const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ) |
- 영상을 이진화 하는데 사용되는 함수 - src : 원본 이미지 - dst : 결과 영상이 저장될 이미지 - threshold : 이진화 임계 값 - max_value : 임계값을 초과한 픽셀 값을 바꿔줄 최대 값을 설정한다. - Threshold_type : 이진화 방식을 결정한다. |
cvCvtColor (const CvArr* src, CvArr* dst, Int code) |
- Color 변환을 해주는 함수 - src : 원본 이미지 - dst : 처리한 영상을 담을 변수 - code : Color 변환 모드 |
ThreShold_Type |
Substance |
CV_THRESH_BINARY |
- 임계 값 이하 : 0, 임계 값 초과 : 1 |
CV_THRESH_BINARY_INV |
- 임계 값 이하 : 1, 임계 값 초과 : 0 |
CV_THRESH_TRUNC |
- 임계 값 이하는 변화 없음, 임계 값 초과는 임계 값 |
CV_THRESH_TOZERO |
- 임계 값 이하는 0, 임계 값 초과는 그대로 |
CV_THRESH_TOZERO_INV |
- 임계 값 이하는 그대로, 임계 값 초과는 0 |
Int Code |
Substance |
CV_RGB2GRAY |
- 흑백으로 변환 |
CV_RGB2YCrCb |
- 주로 Skin Color 모델을 할 때 변환 |
CV_RGB2HLS |
- H(Hue,색상),L(Luminance,휘도),S(Saturation,채도) |
CV_RGB2HSV |
- 모든 컬러를 Hue,Saturation,Value로 표현하는 방식 |
CV_RGB2Lab |
- L은 밝기인 명도,a조합은 녹색에서 적색의 보색 b조합은 황색에서 청색의 보색을 말함. |
CV_RGB2Luv |
- CIE Yxy 색표계에서 지각적 등보성을 보완한 색 공간 |
2. 프로그램 예제 소스
#include <highgui.h>
#include <cv.h>
void main()
{
int i, threshold = 128; //임계값설정
IplImage* image = 0;
IplImage* output = 0;
IplImage* gray = 0;
CvCapture* capture = cvCaptureFromCAM(0);
cvNamedWindow("camera",0); //원본영상을담을윈도우생성
cvNamedWindow("output",0); //반전영상을담을윈도우생성
cvCreateTrackbar("T","camera",&threshold,255,NULL);
//반전영상을위한트랙바설정
while(1)
{
cvGrabFrame(capture); //카메라로부터한프레임을가져온다.
image = cvRetrieveFrame(capture);
cvShowImage("camera",image);
if(!output)
{
gray = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);
//흑백이미지생성
output = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);
//흑백이미지생성
}
cvCvtColor(image,gray,CV_RGB2GRAY); //컬러영상을흑백영상으로변환
if(cvWaitKey(10)>=0)
break;
cvThreshold(gray,output,threshold,255,CV_THRESH_BINARY);
//영상의픽셀값이threshold 값의초과는255로그이하는0으로변환
output->origin = image->origin;
//방향이뒤집어진것을바로잡음
cvShowImage("output",output);
}
cvReleaseImage(&gray);
cvReleaseImage(&output);
cvReleaseCapture(&capture);
cvDestroyWindow("output");
cvDestroyWindow("camera");
}
실행화면
캠 영상
|