Cfile10.uf .1932334D4D2A95F62876AA

RGB 컬러 공간 분리 – 메뉴 기반 구현2

이번에는 지난 시간에 해 봤던 “RGB 컬러 공간 분리 – 메뉴 기반 구현(http://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 클래스 마법사를 실행한 후 그림과 같은 철자를 수행합니다.

Cfile10.uf .1932334D4D2A95F62876AA

 

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에서는 제거합니다.

Cfile7.uf .12363A4F4D2A95F7115279

 

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

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

Similar Posts

  • |

    2계층과 4계층의 오류제어, 흐름제어

    오류제어 및 흐름제어 기능은 계층 2와 4에도 있다. 이들의 차잇점을 쓰시오. 2계층과 4계층의 차이점.2계층은 서로 연결된 두 노드간의 제어이며, 4계층은 단대단 제어이다.따라서 4계층의 오류제어와 흐름제어는 단말과 네트워크를 포함한 제어 기술이다.2계층의 오류 제어는 오류제어를 담당한다. 4계층의 오류제어는 송신측과 수신측 단대단 오류 제어이다.2계층의 흐름제어는 역시 인접노드간의 흐름 제어이고, 4계층의 흐름제어는 단대단 흐름제어이다. 관련된 글: 고속 네트워크 프로토콜의…

  • |

    고속 네트워크 프로토콜의 목적과 수행과정

    고속 네트워크 프로토콜중leaky bucket, flowspec, RSVP, policing, admission control 등의 유기적인 관계를 정확히 쓰시오(수행 과정, 목적 등) 과 모임을 위하여 술집을 예약하는 과정을 빗대어서 설명.Application은 Network에게 질적인 정보나 양적인 정보를 준다. 질적인 정보는 쉽게 명세가 가능하지만 양적인 정보는 쉽게 명세가 불가능하다. Application이 Network에게 주는 이러한 정보를 flowspec이라고 한다. flowspec은 흐름의 트래픽 특성(양적인 정보)을 묘사하는 부분과…

  • 프로젝트 설정 파일 적용하기

    이전 시간까지는 처음에 만들었던 “MFC_OpenCV”라는 프로젝트를 기준으로 진행하였습니다. 하지만, 이제부터는 새 프로젝트를 만들어서 진행하는 경우가 많이 생길텐데요… 이 때마다 프로젝트 설정을 바꿔줘야 하는게 여간 귀찮은게 아닙니다… 그. 래. 서. 이번 시간에는 이러한 설정을 파일로 저장하고, 가져오는 방법에 대해서 알아보겠습니다. 일단 첨부한 OpenCV210.props 파일을 적당한 디렉토리에 다운로드 하시구요… 먼저 이 파일을 어떻게 불러오는지부터 알아보겠습니다. 먼저 VS2010실행하셔서…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다