
修改如下设置:工程(Project)->属性(Properties)->配置属性(Configuration Properties)->c/c++->代码生巧枝成(Code Generation)->运行时库(Use run-time library)->多线程岁袜调试DLL(/MDd)(Multithreaded DLL/Debug Multithreaded DLL)
假设你已经配置好OpenCV的开旁庆发环境。以下是新版OpenCV风格的代码薯仿,经测试可运行。
#include "stdafx.h"
#include "opencv.hpp"
using namespace cv
int main(int argc, char** argv)
{
VideoCapture cap // 用数启纤于打开视频的类
Mat frame // 保存视频帧图像
char c = NULL
cap.open("D:\\test.avi") // 假设你的avi文件在此路径下
while (cap.isOpened())
{
cap >>frame
imshow("frame", frame)
c = waitKey(50) // 每50ms播放一帧,按Esc退出
if (c == 27)
break
}
destroyAllWindows()
cap.release()
return 0
}
#include "CvvImage.h"#include <highgui.h>
#include <cv.h>
IplImage * g_Frame//用于存储一帧
CvvImageg_CvvImage
CvCapture * g_Video
CRect g_Rect
boolg_bRun = true
DWORD WINAPI ThreadFun(LPVOID lParam)
{
xxxDlg* dlg = (xxxDlg*)lParam
CDC* pDC
HDC hdc
CWnd *pwnd
while( g_bRun )
{
g_Frame = cvQueryFrame( g_Video )
pwnd= dlg->GetDlgItem(IDC_STATIC)//PIC控件裂伍
pDC=pwnd->GetDC()
hdc=pDC->GetSafeHdc()
pwnd->GetClientRect(&g_Rect)
g_CvvImage.CopyOf( g_Frame, 1 )//g_CvvImage是CvvImage类型
g_CvvImage.DrawToHDC( hdc, &g_Rect )
dlg->ReleaseDC( pDC )
}
return 0
}
BOOL xxxDlg::OnInitDialog()
{
..
//打开摄岁陵像头
g_Video = cvCreateCameraCapture( -1 )
if ( !g_Video )
{
AfxMessageBox( "无法打开摄像头" )
return FALSE
}
//创建一个线程
CreateThread( NULL, 0, ThreadFun, this, 0, NULL )
}
//最乎源戚后记得释放
void xxxDlg::OnDestroy()
{
CDialog::OnDestroy()
// TODO: 在此处添加消息处理程序代码
g_bRun = false
cvReleaseCapture( &g_Video )
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)