在MFC中显示用OpenCV获得的摄像头视频
主要在两个函数里进行了操作:
void CDemoDoc::OnBegin() //我自己做的一个按钮,在DOC类中通过测试没问题
{
// TODO: Add your command handler code here
capture = cvCreateCameraCapture(0);//capture是IplImage类型
if(!capture)
{
AfxMessageBox("error");
}
while(1){
m_img = cvQueryFrame(capture);//m_img 是IplImage类型
UpdateAllViews(NULL);//去更新View的OnDraw函数
}
}
void CDemoView::OnDraw(CDC* pDC)
{
CDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CImage img;
img.CopyOf(pDoc->m_img, 1);
CRect rect;
GetClientRect (&rect);
rect.right=img.Width();
rect.bottom=img.Height();
img.DrawToHDC(pDC->GetSafeHdc(), rect);
}
有几点声明:
1.凡是你看不到声明的变量我都设成了成员变量;
2.如果我在Doc类里用IplImage格式加载一幅静态图片,通过UpdateAllViews(NULL)使得它在View类中的OnDraw把它拷贝(img.CopyOf)到CImage可以顺利在View类里面显示出来;
3.于是,我就把在While循环把摄像头获得的每一帧IplImage,通过UpdateAllViews到OnDraw中去转换显示,程序如上,可是就是出来不了图像。摄像头没问题,因为我在Win32 Console程序中可以获得摄像头的视频,OpenCV 的库函数头文件都没有问题。
所以在此请教大家,这是怎么回事?我觉得思路没错啊!