dev-logs
2. MFC를 이용한 viewer 만들기_jpg 불러오기 본문
간단한 뷰어 프로그램을 만들어보려 합니다.
UI는 c++ MFC를 사용합니다.
MFC 를 다루는건 이번이 처음인데 윈폼이 그리워집니다.
MFC 응용 프로그램 선택
대화상자 기반 을 선택하고 마침 합니다.
이런 dialog가 만들어집니다.
왼쪽에 리소스 뷰를 보시면 밑줄친폴더 우클릭 후 리소스 추가
Menu를 새로만들기 합니다.
메뉴 창이 따로 만들어지네요. 컨트롤을 입력해주세요!
참고로 이번포스팅은 File Open 까지 구현합니다..ㅎㅎ
File Open 버튼에서 우클릭 - 이벤트 처리기 추가 클릭
위와 같이 선택해주세요. 저는 보기편하게 함수처리기 이름을 위처럼 살짝 변경했습니다 :)
추가 및 편집 을 누르면 코드창으로 이동합니다.
이런 함수가 만들어지고 여기에 이벤트를 구현합니다.
openfiledialog에서 이미지파일을 오픈하게 구현할계획입니다.
우선 이 프로젝트에 opencv가 세팅이 안되어있으므로 세팅을 해줍니다!(이전 포스팅 참조)
프로젝트를 만들때마다 세팅해줘야한다더군요..ㅜ
혹시 미리 설정해두는 방법 아시는분은 댓글로 알려주시면 감사하겠습니다ㅜ 참 번거로워요..ㅜ
헤더파일에 다음 선언을 먼저 해줍니다.
1 2 3 4 | public: Mat InpImg, OutImg, TempImg; unsigned char** GrayImg; unsigned char** U, ** V; | cs |
아,
헤더파일 맨위에
1 2 3 | #include "opencv2\opencv.hpp" using namespace cv; | cs |
이부분도 빼먹으시면 안됩니다ㅎㅎ
다음은 cpp 파일 이벤트함수 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void CViewerDlg::OnFileOpenBtnClick() { CFileDialog dlg(TRUE); // true 일때만 dialog가 열린다고 합니다. if (dlg.DoModal() == IDOK) { if (dlg.GetFileExt() != "jpg" && dlg.GetFileExt() != "JPG") { MessageBox(_T("jpg 파일이 아닙니다."), _T("알림"), MB_OK); return; } InpImg = imread((const char*)dlg.GetPathName()); imshow("InpImg", InpImg); waitKey(0); } } | cs |
opencv 에서 자주 사용되는 생성자를 정리해봤습니다.
Mat();
-> default
Mat(int rows, int cols, int type);
-> rows: 영상의 높이, cols: 영상의 폭, type: 영상의 Data type & channel
Mat(Size size, int type);
-> size : 영상의 폭과 높이를 저장하는 구조체
Mat(const Mat& m, const Rect& roi);
다음은 주요 필드 멤버
int rows, cols;
uchar* data;
-> 영상의 실제 값이 저장되어 있는 unsigned char * 형의 객체,
-> 실제 데이터 접근은 At() Method를 통해 이루어짐.
Mat 클래스의 주요 멤버메소드 입니다.
void copyTo(OutputArray m) const;
-> 객체에 저장된 영상정보를 입력 객체에 복사
-> ex:
1 2 3 | Mat InputImage = imread("Test.jpg"); Mat OutputImage; InputImage.copyTo(OutputImage); | cs |
template<typename _Tp> _Tp& at(int i0, int i1)
-> 객체에 저장된 영상 픽셀 1개의 값을 가져온다
-> 템플릿 메서드
-> ex : uchar pixel = InputImage.at<uchar>(100, 100);
Namespace cv 의 주요 메서드들
Mat imread(const String& filename, int flags = IMREAD_COLOR);
-> 영상파일을 불러들여와 Mat 객체에 저장. jpg, png 포맷지원
bool imwrite(const String& filename, InputArray img,
const std::vector<int>& params = std::vector<int>());
-> 객체에 저장된 영상정보를 filename을 이용해 저장한다.
void imshow(const String& winname, InputArray mat);
-> Mat 객체를 특정 윈도우에 Display 한다.
int waitKey(int delay = 0);
-> 지정된 시간만큼 키의 입력을 기다린다. 0을 입력하면 키보드입력이 들어올 때까지 무한대기.
'공부 > 영상처리' 카테고리의 다른 글
[이미지포맷변환] yuv422 to gray (0) | 2018.07.17 |
---|---|
카메라에서 frame 들어오는 속도 확인하는 법 (0) | 2018.01.19 |
3. MFC를 이용한 viewer 만들기_RGB를GRAY로 (2) | 2017.12.15 |
1. opencv 3.0 설치 및 세팅 (0) | 2017.12.15 |
[Android] Android에서 카메라로 동영상 녹화하기-외부저장소에 접근 (0) | 2017.12.07 |