1. (프로젝트명).rc
1 ) Picture Control 생성
Toolbox에서 PictureControl을 선택하여 Dialog위로 드래그하여 원하는 위치에 배치하고 크기를 조절한다.
Dialog를 띄워두지 않은상태면 Toolbox를 클릭해도 아무것도 뜨지 않는다.
Dialog창이 없다면 Resource View - Dialog - IDD_(프로젝트명)_DIALOG를 클릭
2) 속성설정 및 변수추가
Picture Control 오른쪽클릭 - Properties - Misc - ID를 IDC_PIC으로 바꿔주었다.
Picture Control 오른쪽클릭 - Add Variable 클릭
Variable type : CStatic / Category : Control / Variable name : m_video
2. (프로젝트명)Dlg.h
1) Header 파일 추가 : CvvImage.h, CvvImage.cpp파일을 다운받아 프로젝트 폴더에 넣어주어야 한다
#include "opencv/cv.h" #include "opencv/cxcore.h" #include "opencv2/opencv.hpp" #include "CvvImage.h"
2) 관련 함수선언
class CWebCamera4Dlg : public CDialogEx { ... public: CStatic m_video; // Dialog에서 변수추가를 제대로 했다면 적혀있을것이다 cv::VideoCapture cam; afx_msg UINT CWebCamera4Dlg::GrabLoop(); }; UINT ThreadProc(LPVOID IParam);
3. (프로젝트명)Dlg.cpp
1) C(프로젝트명)Dlg::OnInitDialog 에서 Thread 시작
BOOL CWebCamera4Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); ... // TODO: Add extra initialization here cam.open (1); //캠연결. 노트북의경우 내장 캠이 0번이므로 USB 캠은 1번부터 시작한다. if(!cam.isOpened()) AfxMessageBox(_T("Camera1 Open Error")); else AfxBeginThread(ThreadProc,this); //Thread 시작 return TRUE; // return TRUE unless you set the focus to a control }
2) ThreadProc 함수
UINT ThreadProc(LPVOID IParam){ //Thread return ((CWebCamera4Dlg*)IParam)->GrabLoop(); }
3) GrapLoop함수
UINT CWebCamera4Dlg::GrabLoop(void){ CDC* pDC; CRect rect; cv::Mat m_mImage; IplImage* m_pImage= NULL; CvvImage m_cImage; /*영상을 받아서 입력, 다이얼로그에 뿌려주기*/ while(1){ if(this->cam.isOpened()){ this->cam >> m_mImage; } if(!m_mImage.empty()){ m_pImage = &IplImage(m_mImage); //Mat이미지->IPL이미지 pDC = this->m_vedio->GetDC(); // picture control의 DC얻어옴 this->m_vedio->GetClientRect(&rect); //picture control의 크기알아내기 m_cImage.CopyOf(m_pImage); //IPL이미지-> CVV이미지 m_cImage.DrawToHDC(pDC->m_hDC,rect);//CVV이미지를 DC에 그림 ReleaseDC(pDC);//가져온DC해제 } Sleep(33); } this->cam.release(); return 0; }
※ 참고한 사이트
1 )http://blog.naver.com/pckbj123/100202287760
2) http://pjhhong.blog.me/201806896
코딩할 당시에는 여기저기 검색해보고 따라하느라 출처를 따로 정리해두지 않아서
블로그에 정리하면서 열어본페이지를 일일히 다시 열어보았다
도저히 못찾겠어서 코드를 복사해서 검색하니 바로 나온다 하하
실제로 내가 만든 프로젝트는 이런 Thread를 4개 만들어서 카메라 4개의 영상을 받아오는 것이었다.
대부분 1번 사이트 내용을 참고하였지만, Timer를 이용해 영상을 뿌려보니 영상이 끊기는 감이 있어
2번 사이트를 보고 Thread를 이용하는 방식으로 바꾸어 주었다.
내 노트북에서 프로그램을 돌리면 카메라가 3개 연결될때까지는 끊김없이 매우 잘 돌아가는데,
4개를 연결하는 순간 프로그램이 멎어버린다. 프로그램상의 문제인줄 알았으나
노트북의 문제인듯하다 다른 노트북으로 실행시키니 4개 모두 잘되는것을 확인하였다.
노트북 3대, 데스크탑 1대, 올인원PC 1대로 테스트해보았고 내 노트북과 데스크탑에서만 멈추었다.
잘 돌아가는 노트북이 내꺼보다 4년전에 나온거라 성능의 문제는 아닌것 같은데 도대체 뭐가 문제인걸까
운영체제도 32bit 윈7, 64bit 윈7, 윈8로 다양해서 뭐가 문제인지 모르겠다 ㅋㅋㅋ
MFC | Dialog 배경이미지 넣기 (0) | 2014.11.15 |
---|---|
MFC | Picture Control을 버튼으로 사용하기 (0) | 2014.11.15 |
MFC | 이미지버튼 만들기 (0) | 2014.11.14 |
MFC | 영상 회전시키기 (0) | 2014.11.14 |
MFC | OpenCV 개발환경 (0) | 2014.11.14 |
Tistory | 게시글 썸네일(Thumbnail) 지정하기 (0) | 2014.10.19 |
Tistory | 최근포스트(Recent Post) 접기 (0) | 2014.10.15 |
Tistory | HTML을 이용하여 소스코드 올리기 (0) | 2014.10.05 |