관리 메뉴

마틴블로그닷넷

OpenCV 강좌 03. 다이얼로그에 캠 영상 입력받기 본문

[ 프로그래밍 ]/강좌

OpenCV 강좌 03. 다이얼로그에 캠 영상 입력받기

K. Martin 2009.06.25 22:40
OpenCV를 공부하면서 부터 캠을 하나 사야지 사야지 벼르고 있었는데,
들로네 님의 추천(웹캠으로 주행중 차량 번호판을 추출한다)으로 좋은 캠을 하나 알게된 차에
증강현실(AR)을 이용한 마술을 보고 너무너무 따라해 보고 싶은 마음에,
과감하게 캠을 하나 질렀다.

이 캠이 앞으로의 연구들에 큰 역할을 하기를!!

Genius Slim 1320, 25000원
 


OpenCV 설정 및 MFC 프로그램 기본에 대한 사항은 이전 글을 참고할 것
강좌 01. MFC로 OpenCV 시작하기
강좌 02. 다이얼로그(Static Control)에 이미지 출력하기

1. 웹캠에서 영상을 입력받기 위한 변수 선언

2. 웹캠 연결 및 타이머 설정
- 일반적으로 캠 영상의 입력은 콜백함수를 이용하지만, 예제에서는 간단히 타이머를 이용하여 프로그램한다.

- OnInitDialog() 함수에서 웹캠에 연결을 시도하고, 타이머를 설정한다.

3. 타이머 정의
- CWebCamDlg 클래스의 속성에서 OnTimer를 추가하고, 매 호출시 마다 캠에서 프레임을 가져온다.
- DestroyWindow()에서 캠 연결을 종료한다.

4. 캠 입력 프로그램 동작 확인
- 짜자잔~ 간단하게 프로그램 완성!



25 Comments
  • Favicon of http://acaran.net acaran 2009.06.26 21:02 신고 요즘 opencv에 삘~ 받으셨나 보네요~ ㅋ 나도 요거 좀 써볼까나...
  • Favicon of http://martinblog.net K. Martin 2009.06.29 10:35 신고 응. 재미있게 잘 쓰고 있지.
    필요한 요소들 끌어 쓰기에 도움되는 것들이 제법 있더라고.
    다양한 분야 공부도 되고 말이야.
  • SUGIN 2016.10.27 20:04 신고 안녕하세요 opencv공부하고 있는 학생입니다. 웹캠에서 키는게 아니라 DSLR을 스파코캠이라는 프로그램을 이용해서 웹캠처럼 사용하고 있는데 위와 같은 웹캠을 사용하는 코드에 사용해도 되는지 아니면 다른코드가 있는지 아니면 스파코캠이라는 프로그램을 사용하면 안되는지 궁금합니다. 죄송합니다ㅠㅜ 초보라서 궁금한 것 투성이네요ㅠㅜ
  • 들로네 2009.06.27 16:52 신고 이 캠으로 증강현실 마커 인식 해봤는데 처음에는 무척 불안하드라고요 .... 근데 카메라 칼리브레이션 한후에는 상당히 만족스러웠습니다 ^^ 이캠이 리얼 130만인데 요새 새로나온게 200만화소짜리가 있네요 ㅠ.ㅠ
  • Favicon of http://martinblog.net K. Martin 2009.06.29 10:35 신고 앗! 정말 좋은 정보네요.
    칼리브레이션. 해보고 안되면 꼭! 물어볼게요.
  • csjhahaha 2009.11.11 18:24 신고 마틴님꺼 보면서 열심히 공부하고 있는학생입니다.
    여쭤 보고 싶은게 있어서 그러는데요
    처음에 입력받은 영상을 이진화하면 새창으로 뜨는데
    윈도우폼에 다이얼로그를 하나 더만들어서 새창으로 뜨지않게 하고싶은데
    어떻게 해야하는지 힌트좀 주세요 ㅠㅠ
    전혀 감을 못잡고 있습니다 ㅠ
  • Favicon of http://martinblog.net K. Martin 2009.11.12 10:50 신고 STATIC CONTROL을 하나 더 만드신 후에,
    OnPaint에서 그곳에 이진화 관련 영상을 출력해 줄 수 있도록 하시면 좋을 것 같습니다.
    http://martinblog.tistory.com/822 를 보시면 기본적인 내용이 나와 있으니 참고하세요.
  • csjhahaha 2009.11.12 19:35 신고 감사합니다 마틴님
    위 답글을 보고 STATIC CONTROL (m_stDisplay2) 을 하나 더만들고
    OnPaint() 이곳에 아래 코드를 추가했습니다.
    컴파일에러는 없는데, 새로만든 컨트롤에 출력이 안되네요.
    m_cImage2.CopyOf(gray); 에서 gray 대신 m_pImage를 넣으면
    메인영상은 두곳(m_stDisplay, m_stDisplay2) 에서 잘 출력이되네요.

    void CWebCamDlg::OnPaint(){
    ...신
    if(m_bBinarize)
    {
    CDC* pDC2;
    CRect rect2;

    pDC2 = m_stDisplay2.GetDC();
    m_stDisplay2.GetClientRect(&rect2);
    m_cImage2.CopyOf(gray); // gray 를 public으로 했음.
    m_cImage2.DrawToHDC(pDC2->m_hDC, rect2);
    ReleaseDC(pDC2);
    }
    ...
    }
  • 안녕하세요! 2010.01.14 14:57 신고 안녕하세요!
    마틴님 강좌보면서 열심히 공부하고 있습니다!
    그런데 다이얼로그에 캠 영상을 입력받고 싶은데, 검정색만 뜨네요 ㅠ
    이런경우는 왜 그런건가요.
    제 캠이 다른 프로그램에선 잘 돌아가는 것 같은데, 오픈씨브이만 하면 말썽이네요 ㅠㅠ도와주세요 ㅠㅠ
  • 송지혜 2010.05.24 11:33 신고 웹캠이 입력을 받다가 멈추는데 리프레시가 제대로 안되는 것 같은데 해결방안없을까요?
  • Favicon of http://martinblog.net K. Martin 2010.05.24 14:17 신고 마틴입니다.
    여러가지 원인으로 프로그램이 잘 안돌아가는 경우가 있을 수 있습니다.
    모든 문제를 파악하지 못해 일일이 답변을 못드리는 점 유감스럽게 생각합니다.
    조금 더 자세한 내용에 대해서 말씀해 주시면
    아는 한도 내에서 최대한 도움 드릴 수 있도록 하겠습니다.
  • Favicon of http://www.liketoday.net 레고 2010.06.06 10:09 신고 마틴님 질문이 있는데요
    대화상자 기반에서
    IplImage * 변수 의 cvrelease를 어디서 해줘야 할지를 잘 모르겠습니다.
    ontimer에 해줘도 에러가 나고
    onpaint에 해줘도 에러가 납니다.

    소스는 현재 마틴님 처음꺼부터 참고해서 현재 열기연산까지 한 상태인데
    총 창은 다이얼로그 하나에 static display 3개를 이용하여 영상 세개를 띄워놓은 상태입니다.

    거의 초당 5000kb씩 메모리 누수가 발생해서요.
  • Favicon of http://martinblog.net K. Martin 2010.06.07 09:52 신고 DestroyWindow() 에서 하시면 됩니다
  • 이지미 2010.06.08 22:25 신고 3. 타이머 정의 에서 속성부분 WM_TIMER 설정할 수가 없네요

    프로젝트 만들 때 잘못 만들어서 그런가요? 전 강좌 #1-2를 참고해서 만들었습니다;;
    제가 잘못 만든건가요?
  • 앙다 2010.09.03 10:45 신고 마틴님 혹시 2.0 써보셨어요 ???
    2.0은 지금 마틴님이 쓰신 카메라 입력은 안되더라구요
    이거 말고 다른건 되는데 이게 되야 마틴님이 하신 동영상 마커 해볼 수 있거든요
    어떤말로는 cvcam 기능이 2.0에서 없어졌다고도 하던거 같은데 답변 부탁드릴게요 ^^
  • Favicon of http://martinblog.net K. Martin 2010.09.04 23:48 신고 제가 사용한 버전은 1.1pre였고요,
    2.0에서도 별 무리없이 돌아갑니다.
    아마도 다른 부분에서 문제가 있는 것이 아닐까 생각됩니다.
    확인 부탁 드릴게요.
  • 꼬마석사 2010.11.11 21:52 신고 마틴님의 강의 잘보고 있습니다. 제가 어느 교육센터에서 수업을 듣고 있는데 곧 있으면 프로젝트를 하나 만들어야 해서 관심있는 분야를 찾고 찾다가 OpenCV를 접하게 되고 여기까지 오게 되었네요..ㅎㅎ 얼른 열심히 해서 손인식 마우스 제어를 하고 싶은데 아직 막막하네요.. 그래도 열심히 하면 언젠간 답이 나오겟져..ㅎㅎ 마틴님의 강의 계속 쭉~~ 열심히 보겠습니다~!
  • Favicon of http://blog.naver.com/gorila222 공돌이 2010.11.12 23:21 신고 에러 워닝은 없는데
    실행하면 카메라를 못받네요..'
    if( m_pImage )
    {
    MessageBox("1");
    // 메인 이미지
    CDC* pDC;
    CRect rect;
    요기로 못들어가네요.. 다른것들도 뺴먹은게 업는거 같은데...
  • ?! 2011.01.14 21:28 신고 한 다이얼로그에 여러개의 영상을 띄울려면 어떻게 해야 하나요? 관련서적을 알수 있을까요?
  • opencv 2012.08.09 20:04 신고 마틴님 꺼 실행시켜봤는데 이런 에러가 뜨네요 ;;
    1>------ 빌드 시작: 프로젝트: webcam, 구성: Debug Win32 ------
    1>빌드 시작: 2012-08-09 오후 8:00:48
    1>PrepareForBuild:
    1> "c:\users\jhsong\documents\visual studio 2010\Projects\webcam\Debug\" 디렉터리를 만들고 있습니다.
    1>InitializeBuildStatus:
    1> "AlwaysCreate"이(가) 지정되었기 때문에 "Debug\webcam.unsuccessfulbuild"을(를) 만들고 있습니다.
    1>LINK : error LNK2001: _mainCRTStartup 외부 기호를 확인할 수 없습니다.
    1>c:\users\jhsong\documents\visual studio 2010\Projects\webcam\Debug\webcam.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
    1>
    1>빌드하지 못했습니다.
    1>
    1>경과 시간: 00:00:01.97
    ========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========


    이거 무슨 에러인가요?
  • 2012.10.04 04:18 신고 미남이시네요.
  • 마틴님짱 2013.05.03 10:05 신고 마틴님 안녕하세요.
    좋은 글 잘 읽었습니다.
    제가 이번에 Android의 카메라 영상을 실시간으로 mfc에서 뿌리는 프로그램을 구현중입니다.
    Android의 영상데이터(YUV420SP)를 jpeg로 압축 후 mfc로 전송하며,
    mfc에서 cxImage라는 라이브러리로 디코딩하여 출력하고 있습니다.
    그런데 영상이 조금 버벅거리고 매끄럽지 못하여 보완을 위해 검색을 하던 중
    OpenCV라는 것을 알게 되었는데요.
    지금 제 상황에서 OpenCV를 통하여 영상을 출력할 수 있는지,
    혹 가능하다면 참고할 만한 사이트를 소개해 주시면 너무 감사하겠습니다.
    좋은 하루 되세요. ^^
  • 박주환 2013.11.28 08:24 신고 강좌대로 그대로했는데요 ㅠ 에러없는데 검은색으로 뜨는데 ㅠ 어떤 오류가 있는건지 좀 알려주시면 감사하겠습니다.

    opencv 초보에요 ㅠ
  • 김태원 2014.02.20 10:37 신고 open cv를 사용하는 학생인데요 웹캠을 이용해서 이미지를 뿌릴떄 Width랑 Height의 크기를 바꿀수 있을까요?
    뿌리는 부분을 줄여서 좀더 연산을 빠르게 하고 싶습니다.
  • 퍼시픽 2014.11.20 17:46 신고 drc wifi카메라를 불러올려고 하는데요 .. 어떻게하죠
댓글쓰기 폼