지금까지 VS2010과 OpenCV 2.1라이브러리를 이용한 MFC 프로그래밍 기초에 대해서 알아봤습니다.
우리가 하려고 하는 것이 동영상 처리이므로 이번 시간에는 Cam으로부터 영상을 받아와서 출력하는 방법에 대해서 알아보겠습니다.
먼저 새 프로젝트를 Win32 콘솔 응용 프로그램 형식으로 만들어 줍니다.

OpenCV 2.1 라이브러리를 사용하기 위한 각종 세팅은 당연히 해주셔야 겠죠? 자세한 내용은“Visual Studio 2010에서 OpenCV MFC 프로젝트 만들기(http://deios.kr/400)”를 참고하세요.
그 후 다음과 같이 코딩합니다.
// CamTest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
void CamImageProcess(IplImage *);
int _tmain(int argc, _TCHAR* argv[])
{
IplImage *image = 0;
CvCapture *capture = cvCaptureFromCAM(0);
cvNamedWindow( "Test cvCam", 0 );
while(1) {
cvGrabFrame( capture );
image = cvRetrieveFrame( capture );
CamImageProcess(image);
cvShowImage( "Test cvCam", image );
if( cvWaitKey(10) >= 0 )
break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Test cvCam" );
return 0;
}
void CamImageProcess(IplImage *image){
// image 복사
IplImage *src = cvCloneImage(image);
//Enhance detail filter - 물체를 둘러싼 것을 상세히 드러내는 효과를 냄.
float kernel[] = { 0.0f/5.0f, -1.0f/5.0f, 0.0f/5.0f,
-1.0f/5.0f, 9.0f/5.0f, -1.0f/5.0f,
0.0f/5.0f, -1.0f/5.0f, 0.0f/5.0f};
// CvMat 변환
CvMat mat_kernel = cvMat(3,3,CV_32FC1, kernel);
// 필터링 수행 결과를 담을 영상 초기화
IplImage *dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, src->nChannels);
// 필터링 수행
cvFilter2D(src, dst, &mat_kernel, cvPoint(-1, -1));
cvCopy(dst, image);
cvReleaseData(&mat_kernel);
cvReleaseImage(&src);
cvReleaseImage(&dst);
}
수행 결과는 다음과 같습니다.

Reference
정성환 외 1명/컴퓨터 비전 실무 프로그래밍/홍릉과학출판사/2007/388p~389p
cfile30.uf.140EDF474D2EAE6C3B94E5.pdfcfile24.uf.142589474D2EAE6E083F38.zip
2 thoughts to “Cam 영상 출력해보기”