Cfile3.uf .115176494D2EAD82158A58

Cam 영상 출력해보기

지금까지 VS2010과 OpenCV 2.1라이브러리를 이용한 MFC 프로그래밍 기초에 대해서 알아봤습니다.

우리가 하려고 하는 것이 동영상 처리이므로 이번 시간에는 Cam으로부터 영상을 받아와서 출력하는 방법에 대해서 알아보겠습니다.

먼저 새 프로젝트를 Win32 콘솔 응용 프로그램 형식으로 만들어 줍니다.

Cfile3.uf .115176494D2EAD82158A58

 

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);

}

수행 결과는 다음과 같습니다.

 

Cfile26.uf .150E7F4F4D2EAD83053A3C

 

Reference
정성환 외 1명/컴퓨터 비전 실무 프로그래밍/홍릉과학출판사/2007/388p~389p

cfile30.uf.140EDF474D2EAE6C3B94E5.pdfcfile24.uf.142589474D2EAE6E083F38.zip

 

Similar Posts

  • Face Detect

    이번 시간은 MFC와 OpenCV의 기본 사용법 마지막 내용이 되겠습니다. Cam 영상을 Dialog에 뿌려주는 부분에서 기본 사용법이 끝났어야 하지만… 조금 아쉬운 관계로 더 진행해 봤죠… 저도 아직 초보단계지만, MFC와 OpenCV의 기본 사용법은 뭐 없습니다… MFC야… GUI프로그래밍을 위해서 그냥 쓴 것이고… OpenCV는 영상을 받아오고, 출력하는 부분만 하면 기본은 끝난거 아닌가요?   지금까지 “오픈소스 OpenCV를 이용한 컴퓨터 비전…

  • 프로젝트 설정 파일 적용하기

    이전 시간까지는 처음에 만들었던 “MFC_OpenCV”라는 프로젝트를 기준으로 진행하였습니다. 하지만, 이제부터는 새 프로젝트를 만들어서 진행하는 경우가 많이 생길텐데요… 이 때마다 프로젝트 설정을 바꿔줘야 하는게 여간 귀찮은게 아닙니다… 그. 래. 서. 이번 시간에는 이러한 설정을 파일로 저장하고, 가져오는 방법에 대해서 알아보겠습니다. 일단 첨부한 OpenCV210.props 파일을 적당한 디렉토리에 다운로드 하시구요… 먼저 이 파일을 어떻게 불러오는지부터 알아보겠습니다. 먼저 VS2010실행하셔서…

  • [VS2010]LPCTSTR에서 char*로 형 변환하기

    OpenCV를 가지고 놀고 있는데 이놈이 char *밖에 지원하지 않아서 고생이 많습니다. 소스도 있겠다 확 다 뜯어고쳐버릴까… 라고 생각은 했지만 막상 하려니 엄두가 나질 않네요… 이게 다 실력이 부족해서라는… ㄷㄷㄷ MSDN도 찾아보고 이래저래 해봤지만 파일 경로등 특수문자 or 한글(유니코드)를 포함한 LPCTSTR은 char*형으로 쉽게 변환하지 못했습니다. \는 짤라먹기 일수고 한글은 듣도보도 못한 한자 or 일어로 변환되버렸죠 ㅠㅠ…

  • 정지영상 캡춰기능 구현

    이번 내용도 후딱 넘어가겠습니다. 이전 시간까지 Cam에서 영상을 받아와 Dialog로 뿌려주는 부분을 했었죠? 이번 시간에는 이 동영상의 스틸 컷(Still Cut)을 만들 수 있게 정지영상으로 캡춰하는 기능을 구현해 보도록 하겠습니다. 참고로 동영상으로 저장하고 싶다면 cvReleaseVideoWriter, cvWriteFrame, cvReleaseVideoWriter를 적절하게(?) 쓰시면 됩니다.   정지영상 캡춰기능은 정말 간단합니다. 버튼 하나 만들구요, 그 버튼을 누르면… 전에 만들었던 전역 함수 기억하시죠?…

  • Visual Studio 2010에서 OpenCV MFC 프로젝트 만들기

    이번에는 Visual Studio 2010에서 OpenCV 2.1 라이브러리를 활용하여 MFC프로젝트를 만들고, 이미지를 불러와서 화면에 출력해보겠습니다.   먼저 제 환경은 다음과 같고, DLL파일은 path환경변수에 설정되어 있습니다. DLL : “D:\lib\bin” Header : “D:\lib\include” Library : “D:\lib\lib” Source : “D:\lib\src”   VS2010에서 [파일] → [새로만들기] → [프로젝트]를 선택합니다.   너무나도 당연하게 ‘Visual C++ MFC 응용 프로그램’을 선택해 주어야겠죠?  …

  • |

    고속 네트워크에서의 메모리 병목 현상

    메모리가 미래 통신에 있어서 병목 지점이 되는 이유를 설명하고 해결 방안을 제시하시오. 1) 메모리는 코드와 데이터를 함께 저장한다. 표현 계층이 개입한다면 메모리 연산이 증가하게 되어 병목 현상이 발생한다. -> 표현계층을 적게 사용한다.2) 각 계층 이동시 메모리 연산 증가. OSI-7-layer에서 각 계층 이동시 메모리 복사가 빈번하게 일어나게 된다. -> shared memory, page remapping, 계층 통합 처리3)…

2 Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다