---
title: "RGB 컬러 공간 분리 – 메뉴 기반 구현2"
id: "711"
type: "post"
slug: "408"
published_at: "2011-01-10T05:18:57+00:00"
modified_at: "2025-12-12T04:28:41+00:00"
url: "https://dworld.deios.kr/408/"
markdown_url: "https://dworld.deios.kr/408.md"
excerpt: "이번에는 지난 시간에 해 봤던 “RGB 컬러 공간 분리 – 메뉴 기반 구현(http://deios.kr/407)”의 새 창으로 여는 부분을 조금 더 일반화 하고, MFC에 적합하게 만들어 보겠습니다. 먼저 새 창으로 이미지를 여는 전역 함수를 작성해 보겠습니다. App Class의 헤더 파일을 열어 가장..."
taxonomy_category:
  - "Study"
taxonomy_post_tag:
  - "MFC"
  - "OpenCV 2.1"
  - "vs 2010"
---

이번에는 지난 시간에 해 봤던 “[RGB 컬러 공간 분리 – 메뉴 기반 구현(http://deios.kr/407)](https://dworld.deios.kr/407)
”의 새 창으로 여는 부분을 조금 더 일반화 하고, MFC에 적합하게 만들어 보겠습니다.

먼저 새 창으로 이미지를 여는 전역 함수를 작성해 보겠습니다. App Class의 헤더 파일을 열어 가장 마지막에 다음과 같이 추가해 줍니다.

```
void OpenByNewDocument(LPTSTR szTitle, IplImage * image);
```

이 전역 함수는 문서의 제목과 이미지를 받아 새 창으로 열어주는 함수입니다.

App Class를 열어 가장 마지막에 다음과 같이 코딩합니다.

```
void OpenByNewDocument(LPTSTR szTitle, IplImage * image)

{

        // 새 창에서 열 이미지의 크기를 계산합니다.

        CSize sizeTotal = CSize(image->width, image->height);

 

        // 새 도큐먼트를 생성하는 코드입니다.

        POSITION pos = ((CMFC_OpenCVApp *)AfxGetApp())->GetFirstDocTemplatePosition();   

        CDocTemplate *pTemplate =

                ((CMFC_OpenCVApp *)AfxGetApp())->GetNextDocTemplate(pos);

 

        CMFC_OpenCVDoc *pDoc =

                (CMFC_OpenCVDoc* )pTemplate->OpenDocumentFile(NULL);

        pos = pDoc->GetFirstViewPosition();

        CMFC_OpenCVView *pView = (CMFC_OpenCVView *)pDoc->GetNextView(pos);

        pView->SetScrollSizes(MM_TEXT, sizeTotal);

        pView->ResizeParentToFit(FALSE);

 

        //  두 번째 인자로 받아온 이미지를 새로 만들어진 문서에 적용합니다.

        pDoc->m_CvvImage.CopyOf(image,-1);

 

        if(NULL != szTitle){

                pDoc->SetTitle(szTitle);  

        }

}
```

이젠 View Class에 설정되어 있던 ID_COLOR_SPLIT_RGB 이벤트 처리기를 Doc Class로 옮기겠습니다.

이를 위해 먼저 View Class의 이벤트 처리기를 제거하겠습니다.

[Ctrl + Shift + X]를 눌러 MFC 클래스 마법사를 실행한 후 그림과 같은 철자를 수행합니다.

View Class에 이벤트 처리기를 등록했던 절차와 동일하게 Doc Class에 이벤트 처리기를 등록합니다.

그 후 만들어진 이벤트 처리기에서 다음과 같이 코딩합니다.

```
void CMFC_OpenCVDoc::OnColorSplitRgb()

{

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

        if( m_CvvImage.GetImage()->nChannels != 3 ){  

                AfxMessageBox( TEXT("컬러 영상이 아닙니다."), MB_ICONSTOP );  

                return;  

        }

        IplImage *red, *green, *blue;   

        CDeiosColor cColor;  

        cColor.DSplitRGB( m_CvvImage.GetImage(), &red, &green, &blue );  

        OpenByNewDocument(TEXT("[SplitRGB()] 변환 결과 - 빨강 채널"), red);

        OpenByNewDocument(TEXT("[SplitRGB()] 변환 결과 - 초록 채널"), green);

        OpenByNewDocument(TEXT("[SplitRGB()] 변환 결과 - 파랑 채널"), blue);

        cvReleaseImage( &red );  

        cvReleaseImage( &green );  

        cvReleaseImage( &blue );  

}
```

마지막으로 Doc Class의 상단에 DeiosColor.h 헤더파일을 include 하고, View Class에서는 제거합니다.

Reference  
황선규/영상처리프로그래밍byC++/한빛미디어/2009/222p~227p

cfile25.uf.114484374D2A96AB18F7AF.pdfcfile25.uf.15467E374D2A96AC132546.zip***http***://mfc-opencv.googlecode.com/svn/trunk/ -> r2

### 이 글 공유하기:

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

### 이것이 좋아요:

좋아하기로드 중...

### *관련*

### 관련된 글:

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

## Similar Posts

- [https://dworld.deios.kr/424/](https://dworld.deios.kr/424/) 이전 시간까지는 처음에 만들었던 “MFC_OpenCV”라는 프로젝트를 기준으로 진행하였습니다. 하지만, 이제부터는 새 프로젝트를 만들어서 진행하는 경우가 많이 생길텐데요… 이 때마다 프로젝트 설정을 바꿔줘야 하는게 여간 귀찮은게 아닙니다… 그. 래. 서. 이번 시간에는 이러한 설정을 파일로 저장하고, 가져오는 방법에 대해서 알아보겠습니다. 일단 첨부한 OpenCV210.props 파일을 적당한 디렉토리에 다운로드 하시구요… 먼저 이 파일을 어떻게 불러오는지부터 알아보겠습니다. 먼저 VS2010실행하셔서… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/424/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/424/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- TCP의 폭주제어에서 예약방식을 못 쓰고 피드백 기반 방식을 사용하여야 하는 이유를 설명하시오. 예약 방식의 경우 데이터 전송 중 경로상의 라우터에서 폭주 혹은 에러가 발생했을 경우 송신자는 계속 데이터를 보내게 되어 혼잡이 가중된다. 이를 해결하기 위해 피드백 방식을 사용한다.송신자는 약간의 데이터만 전송하여 도착 여부를 확인 후 점점 전송량을 늘려간다. 이처럼 네트워크의 상태에 따라 송신측에서 전송량을 조절하여야 한다…. ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/372/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/372/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/400/](https://dworld.deios.kr/400/) 이번에는 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 응용 프로그램’을 선택해 주어야겠죠? … ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/400/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/400/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- cfile28.uf.1804194F4F95B41B178B7C.pdf 관련된 글: 고속 네트워크 프로토콜의 목적과 수행과정 OpenCV 파일 저장기능 구현 MFC – Cam 영상 출력해보기 모덜리스(Modeless) Dialog로 변환하기 ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/462/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/462/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/398/](https://dworld.deios.kr/398/) 저번에 해봤던 “Visual Studio 2010에서 OpenCV 이용하기(http://deios.kr/395)”에서는 디버그 모드로 이용이 불가능한 문제가 있었습니다. 그래서 이 번에는 직접 OpenCV 2.1 라이브러리를 빌드해 보도록 하겠습니다. 먼저 CMake를 다운받습니다. CMake는 크로스 플렛폼 Make네요. http://www.cmake.org/cmake/resources/software.html 설치는 별 다른게 없습니다. 그냥 다음 연타로 CMake를 설치해 줍니다. 다음으로 OpenCV 2.1 Windows Version을 다운받고, 적당한 곳에 압축을 풀어 줍니다. http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/OpenCV-2.1.0-win.zip/download… ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/398/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/398/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...
- [https://dworld.deios.kr/404/](https://dworld.deios.kr/404/) 이번 시간에는 드래그 앤 드롭(Drag & Drop) 기능을 구현해 보도록 하겠습니다. App Class의 InitInstance함수에 다음과 같은 코드를 추가하면 끝~! pMainFrame->DragAcceptFiles(); cfile8.uf.163148404D261B97190741.pdfcfile10.uf.133139404D261B9716AF4E.zip 관련된 글: Visual Studio 2010에서 OpenCV 이용하기 OpenCV 파일 저장기능 구현2 모든 창 닫기 구현 클립보드 기능 구현 ### 이 글 공유하기: - [Facebook으로 공유하기 (새 창에서 열림)Facebook](https://dworld.deios.kr/404/?share=facebook) - [X에 공유 (새 창에서 열림)X](https://dworld.deios.kr/404/?share=x) - ### 이것이 좋아요: 좋아하기로드 중...

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