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);
}
이렇게 해줬더니, 새로운 윈도우창은 뜨는데 새로운 윈도우 창에 이진화한 이미지가 안뜨네요..
왜그런걸까요 ㅠ_ㅠ
cvShowImage() 는 그리는 것이 아니고 윈도우에 그릴 이미지 개체를 윈도우 개체에 설정할 뿐이지 싶은데.
그러니까 cvShowImage() 바로 뒤에 cvReleaseImage() 가 있으니 문제지 싶은... cvCreateImage() 를 타이머에서 하지 말고 별도의 로딩쪽에서 하고, cvReleaseImage() 새 이미지 로딩쪽이나 반납쪽에서 해야 하는거 아님?
imshow 하세요
open2/highgui.hpp에 있지 싶은데 저는 imshow imread imwrite 만씁니다. 저는 안써봐서 잘 모르겠는데 님이 쓰시는 opencv는 c언어용인듯 class없는거
OpenCV 3씁시다 Mat클래스 짱짱맨이에요 인터넷에 OpenCV Mat to CImage쳐도 많이나옴
설마헤서 그러는데 setTimer는 하셨나여? - dc App