개발/Computer Vision

[OpenCV]사진을 이진화

hojak99 2016. 4. 2. 15:49

opencv를 이용해서 사진 이진화

[영상 이진화란 RGB 값으로 다양하게 분포되어 있는 생상값을 01만의 값으로 표현하는 것입니다. 실제적으로는 RGB 컬러 영상에 흑백영상으로 바꾼 뒤 특정 임계값(Threshold)을 기준으로 초과 값은 255로 이하 값은 0으로 변환하게 하는 것이다. 128을 기준으로 초과값은 255로 변환되어 흰색으로 보여지고 이하 값은 0으로 변환되어 검은색으로 보여진다.]

/*출처 opencv 카페. 영상이였을 때의 코드를 글쓴이가 다시 사진 기준으로 코드 바꿈*/

 

 


#include "opencv2\opencv.hpp"
#include <stdio.h>

//사진이진화
void main() {

	int i, threshold = 128;//임계값(threshold) 설정
	IplImage* image = 0;
	IplImage* output = 0;
	IplImage* gray = 0;

	image = cvLoadImage("chaewon.jpg", 1);

	cvNamedWindow("camera", 0);//원본사진을띄울윈도우
	cvNamedWindow("camera_output", 0);//결과영상을띄울윈도우
	cvCreateTrackbar("T", "camera", &threshold, 255, NULL);
        //camera 윈도우에bar을붙이고threshold 값을변화시킴

	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);//컬러를흑백으로변환
										 
        //사진의각픽셀(x,y)값이threshold 값의초과는255로, 그이하는0으로변환
	cvThreshold(gray, output, threshold, 255, CV_THRESH_BINARY);
	output->origin = image->origin;//방향이뒤집어진것을잡아줌

	cvShowImage("camera_output", output);

	cvWaitKey(0);


	cvReleaseImage(&gray);
	cvReleaseImage(&output);
	cvDestroyWindow("camera_output"); //윈도우 종료
	cvDestroyWindow("camera"); //윈도우 종료
}

 


반응형