在MFC中使用opencv显示摄像头捕获的视频流,为何显示不出来

#include"opencv2/objdetect/objdetect.hpp"#include"opencv2/highgui/highgui.hpp"#includ... #include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "CvvImage.h"

CvCapture* capture;
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;

BOOL CVideoMFCDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
……
// TODO: 在此添加额外的初始化代码
pwnd = GetDlgItem(IDC_STATIC);
pDC = pwnd->GetDC();
hDC = pDC->GetSafeHdc();
pwnd->GetClientRect(&rect);

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
……
void CVideoMFCDlg::OnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//UpdateData();
if(!capture)
{
//int count = 0;
//while(count<10) count++;
capture = cvCaptureFromCAM( 0 );
if(capture) AfxMessageBox(_T("ok"));
}
if(!capture)
{
AfxMessageBox(_T("无法打开摄像头"));
return;
}

//测试..
IplImage* m_Frame;
m_Frame = cvQueryFrame( capture );
CvvImage m_CvvImage;
m_CvvImage.CopyOf(m_Frame,1);

if(true)
{
m_CvvImage.DrawToHDC(hDC,&rect);
}

//设置计时器,每10ms触发一次事件..

SetTimer(1,10,NULL);
}

void CVideoMFCDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
IplImage* m_Frame;
m_Frame = cvQueryFrame(capture);
CvvImage m_CvvImage;
m_CvvImage.CopyOf(m_Frame,1);
if(true)
{
m_CvvImage.DrawToHDC(hDC,&rect);
}
CDialogEx::OnTimer(nIDEvent);
}

void CVideoMFCDlg::OnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
cvReleaseCapture(&capture);
CDC MemDC;
CBitmap m_Bitmap1;
m_Bitmap1.LoadBitmap(IDB_BITMAP1);
MemDC.CreateCompatibleDC(NULL);
MemDC.SelectObject(&m_Bitmap1);
pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,48,48,SRCCOPY);
}
展开
 我来答
bhtzu
2015-05-20 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4204万
展开全部
hDC、pDC不要做全局变量。每次声明局部变量,并注意GetDC使用完成之后,要使用ReleaseDC释放。

其它的看不出当前代码有明显问题。
追问
按照你的方法并没有解决啊
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式