---
title: "OpenCV 파일 저장기능 구현2"
id: "678"
type: "post"
slug: "402"
published_at: "2011-01-06T17:51:33+00:00"
modified_at: "2025-12-12T04:28:32+00:00"
url: "https://dworld.deios.kr/402/"
markdown_url: "https://dworld.deios.kr/402.md"
excerpt: "“OpenCV 파일 저장기능 구현(http://deios.kr/401)”에 파일 저장기능과 파일 열기기능을 강화해 보도록 하겠습니다. 먼저 “새 이름으로 저장”시 자동으로 확장자를 추가하기 위해서 OnFileSaveAs함수를 수정하겠습니다. 수정 전 CFileDialog dlgFile(TRUE); CString fileName; const int c_cMaxFiles = 100; const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH +..."
taxonomy_category:
  - "Study"
taxonomy_post_tag:
  - "MFC"
  - "OpenCV 2.1"
  - "vs 2010"
---

“[OpenCV 파일 저장기능 구현(http://deios.kr/401)](https://dworld.deios.kr/401)
”에 파일 저장기능과 파일 열기기능을 강화해 보도록 하겠습니다.

먼저 “새 이름으로 저장”시 자동으로 확장자를 추가하기 위해서 OnFileSaveAs함수를 수정하겠습니다.

수정 전

```
CFileDialog dlgFile(TRUE);

CString fileName;

const int c_cMaxFiles = 100;

const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1;

dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize);

dlgFile.GetOFN().nMaxFile = c_cbBuffSize;

int chk = dlgFile.DoModal();

fileName.ReleaseBuffer();

if(chk == IDOK){

        pDoc->OnSaveDocument(dlgFile.GetPathName());

}
```

수정 후

```
CString strFilter = TEXT("JPEG files(*.jpg, *.jpeg, *.jpe) |  *.jpg; *.jpeg; *.jpe |\

                        Portable Network Graphics file(*.png) | *.png |\

                        Windows Bitmap files(*.bmp, *.dib) | *.bmp; *.dib |\

                        Sun resters(*.sr, *.ras) | *.sr; *.ras |\

                        TIFF files(*.tiff, *.tif) | *.tiff; *.tif |\

                        지원하는 모든 영상 파일 | *.jpg; *.jpeg; *.jpe; *.png; *.bmp; *.dib; *.sr; *.ras; *.tiff; *.tif || ");

CFileDialog dlgFile(FALSE, TEXT("jpg"), NULL, OFN_OVERWRITEPROMPT, strFilter, this);

 

if(IDOK == dlgFile.DoModal()) {

        pDoc->OnSaveDocument(dlgFile.GetPathName());

}
```

새 이름으로 저장 부분만 수정하면 뭔가 아쉬우니 파일 열기 부분도 확장자가 자동으로 들어가게 수정해 봅시다.

```
void CMFC_OpenCVApp::OnFileOpen()

{       // TODO: 여기에 명령 처리기 코드를 추가합니다.

        CString strFilter = TEXT("JPEG files(*.jpg, *.jpeg, *.jpe) |  *.jpg; *.jpeg; *.jpe |\

                                Portable Network Graphics file(*.png) | *.png |\

                                Windows Bitmap files(*.bmp, *.dib) | *.bmp; *.dib |\

                                Sun resters(*.sr, *.ras) | *.sr; *.ras |\

                                TIFF files(*.tiff, *.tif) | *.tiff; *.tif |\

                                지원하는 모든 영상 파일 | *.jpg; *.jpeg; *.jpe; *.png; *.bmp; *.dib; *.sr; *.ras; *.tiff; *.tif || ");

        CFileDialog dlgFile(TRUE, TEXT("jpg"), TEXT("*.jpg"), OFN_FILEMUSTEXIST |                             OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, strFilter);

        if(IDOK == dlgFile.DoModal()) {

                POSITION pos = dlgFile.GetStartPosition();

                while(pos) OpenDocumentFile(dlgFile.GetNextPathName(pos));

        }

}
```

이젠 다음과 같은 깔끔한 불러오기 & 저장 Dialog를 볼 수 있습니다.

cfile29.uf.12248E3B4D2600FF0E7A9C.pdfcfile7.uf.192619444D2603C109885B.zip

### 이 글 공유하기:

- [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/402/?share=facebook)
- [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/402/?share=x)
-

### 이것이 좋아요:

좋아하기로드 중...

### *관련*

### 관련된 글:

1. [Visual Studio 2010에서 OpenCV 이용하기](https://dworld.deios.kr/395/)
2. [클립보드 기능 구현](https://dworld.deios.kr/406/)
3. [RGB 컬러 공간 분리 – 메뉴 기반 구현](https://dworld.deios.kr/407/)
4. [RGB 컬러 공간 분리 – 메뉴 기반 구현2](https://dworld.deios.kr/408/)

## Similar Posts

- OpenCV를 가지고 놀고 있는데 이놈이 char *밖에 지원하지 않아서 고생이 많습니다. 소스도 있겠다 확 다 뜯어고쳐버릴까… 라고 생각은 했지만 막상 하려니 엄두가 나질 않네요… 이게 다 실력이 부족해서라는… ㄷㄷㄷ MSDN도 찾아보고 이래저래 해봤지만 파일 경로등 특수문자 or 한글(유니코드)를 포함한 LPCTSTR은 char*형으로 쉽게 변환하지 못했습니다. \는 짤라먹기 일수고 한글은 듣도보도 못한 한자 or 일어로 변환되버렸죠 ㅠㅠ… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/399/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/399/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/395/](https://dworld.deios.kr/395/) 제가 참여하고 있는 AR Study에서 IDE는 Visual Studio 2010(vs2010)을, SDK는 OpenCV 2.1를 이용하기로 결정하였습니다. VS2010에서 OpenCV 2.1을 이용하는 방법에 대해서 알아보겠습니다. 먼저 OpenCV 2.1을 다운받습니다. VS2010을 이용할 예정이지만, VS2008용으로 미리 컴파일 된 바이너리를 사용하겠습니다. http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win32-vs2008.exe/download 최신버전인 OpenCV 2.2를 사용하지 않는 이유는 OpenCV 라이브러리들의 이름이 다 바뀌었습니다. 저는 귀찮은게 젤 싫기 때문에 이름이 동일한 OpenCV 2.1을… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/395/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/395/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/406/](https://dworld.deios.kr/406/) 이번에는 자주 사용하는 기능인 C&P(Copy & Paste)를 구현해 보도록 하겠습니다. C&P를 구현하기 위해서는 이미지를 DIB(장치 독립 비트맵;Device Independent Bitmap)으로 변환하여 클립보드 영역에 넘겨주거나, 클립보드 영역에서 데이터를 받아오면 됩니다. 클립보드 영역으로 데이터를 넘겨주기 위하여 CopyClipBoard맴버함수, CopyToHandle 맴버 함수를 추가하여, ID_EDIT_COPY이벤트 핸들러에 등록합니다. 먼저 CopyClipBoard 맴버 함수를 Doc Class에 작성하겠습니다. 반환 형식 : void 함수 이름… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/406/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/406/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/422/](https://dworld.deios.kr/422/) 이번 내용도 후딱 넘어가겠습니다. 이전 시간까지 Cam에서 영상을 받아와 Dialog로 뿌려주는 부분을 했었죠? 이번 시간에는 이 동영상의 스틸 컷(Still Cut)을 만들 수 있게 정지영상으로 캡춰하는 기능을 구현해 보도록 하겠습니다. 참고로 동영상으로 저장하고 싶다면 cvReleaseVideoWriter, cvWriteFrame, cvReleaseVideoWriter를 적절하게(?) 쓰시면 됩니다. 정지영상 캡춰기능은 정말 간단합니다. 버튼 하나 만들구요, 그 버튼을 누르면… 전에 만들었던 전역 함수 기억하시죠?… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/422/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/422/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/408/](https://dworld.deios.kr/408/) 이번에는 지난 시간에 해 봤던 “RGB 컬러 공간 분리 – 메뉴 기반 구현(http://deios.kr/407)”의 새 창으로 여는 부분을 조금 더 일반화 하고, MFC에 적합하게 만들어 보겠습니다. 먼저 새 창으로 이미지를 여는 전역 함수를 작성해 보겠습니다. App Class의 헤더 파일을 열어 가장 마지막에 다음과 같이 추가해 줍니다. void OpenByNewDocument(LPTSTR szTitle, IplImage * image); 이 전역 함수는… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/408/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/408/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/420/](https://dworld.deios.kr/420/) 이번 시간에는 MFC프로젝트에서 Cam 영상을 받아오는 부분을 구현해 보겠습니다. “동영상 처리” → “영상 보기”메뉴를 추가하고, 해당 메뉴를 클릭했을 때, 영상을 뿌려주는 Dialog를 띄웁니다. Dialog에서 “시작” 버튼을 클릭했을 경우 Caption이 “중지”로 바뀌고, Static 영역에 영상을 뿌려주게 만들어 보겠습니다. 먼저 사용할 다이얼로그부터 만들어야겠죠? [리소스 뷰]에서 [리소스 추가]를 선택합니다. [Dialog]가 선택된 것을 확인하고 [새로 만들기]를… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/420/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/420/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...

### 댓글 남기기[응답 취소](/402/?t=1784851326#respond)
