MFC랑 연계한건데, 주요 함수만 긁어오면


void COpenCV_MFCDlg::OnPaint()
{
 if (IsIconic())
 {
  ....
 }
 else
 {
  if(m_pImage)
  {
   CDC* pDC;
   CRect rect;

   pDC = m_stDisplay.GetDC();
   m_stDisplay.GetClientRect(&rect);

   m_cImage.CopyOf(m_pImage);
   m_cImage.DrawToHDC(pDC->m_hDC, rect);

   ReleaseDC(pDC);
  }

  CDialogEx::OnPaint();
 }
}


요놈과


void COpenCV_MFCDlg::OnBnClickedButton3()
{
 if(m_pImage != NULL)
  cvReleaseImage(&m_pImage);
 
 m_pImage = cvLoadImage("LS.jpg", -1);
 
 Invalidate(FALSE);
}


이 방법으로 버튼을 누르면 Dialog에 이미지를 출력하도록 해줘씀다.




그리고


void COpenCV_MFCDlg::OnBnClickedCheck1()
{
 if(!m_bBinarize)
  cvNamedWindow("BINARY",0);
 else
  cvDestroyWindow("BINARY");

 m_bBinarize = !m_bBinarize;

 UpdateData(FALSE);
}


이 방법으로, 체크박스에 체크를 하면 새로운 윈도우 창을 생성하도록 해주었지요.


새로운 윈도우창에 무엇을 내보낼거냐?


바로 이진화 시킨 이미지를 출력하려고 하는데요..


void COpenCV_MFCDlg::OnTimer(UINT_PTR nIDEvent)
{
 if(m_bBinarize)
 {
  IplImage* gray = cvCreateImage(cvGetSize(m_pImage), IPL_DEPTH_8U, 1);

  cvCvtColor(m_pImage, gray, CV_RGB2GRAY);

  cvThreshold(gray, gray, 127.0, 255.0, CV_THRESH_OTSU);

  cvShowImage("BINARY", gray);

  cvReleaseImage(&gray);
 }
 
 Invalidate(FALSE);

 CDialogEx::OnTimer(nIDEvent);
}


이렇게 해줬더니, 새로운 윈도우창은 뜨는데 새로운 윈도우 창에 이진화한 이미지가 안뜨네요..


왜그런걸까요 ㅠ_ㅠ