opencv+directshow采集视频图像
opencv+directshow采集视频图像
来来叔叔 发表于3个月前
opencv+directshow采集视频图像
  • 发表于 3个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

 

主要参考:
http://www.opencv.org.cn/index.php/%E4%BD%BF%E7%94%A8DirectShow%E9%87%87%E9%9B%86%E5%9B%BE%E5%83%8F

CCameraDS类调用采集函数可直接返回IplImage,使用更方便,且集成了DirectShow,勿需安装庞大的DirectX/Platform SDK。
但是文中介绍的方法只能显示在OPENCV创建的窗口中,无法控制它的窗口。而且试图关闭它的窗口时,程序就会死掉。

下面的方法可以把视频显示在窗体中的控件中。
关键代码:

(1) 启动视频函数
int CCarDemoView::StartVideo()
{

CCameraDS camera;
int cam_count;

//获取摄像头数目
cam_count = CCameraDS::CameraCount();
printf("There are %d cameras.\n", cam_count);

if(cam_count==0)
   return -1;


if(! camera.OpenCamera(0, 0))
{
   AfxMessageBox("不能打开摄像头!");
   return -1;
}

CString name;
while(1)
{
   IplImage *pFrame;
   
   //获取一帧视频图像
   pFrame = camera.QueryFrame();

   name="C:\\My pictures\\test.bmp";
   cvSaveImage(name,pFrame);   // 保存采集到的图像
  
   //显示到控件所在的区域
   DrawPicToHDC(pFrame, IDC_VIDEO0);

  
   Sleep(100);
}

camera.CloseCamera(); //可不调用此函数,CCameraDS析构时会自动关闭摄像头
return 0;
}

(2)显示子函数
//将图像显示到一个static控件中
void CCarDemoView::DrawPicToHDC(IplImage *img, UINT ID)

{
CDC *pDC = GetDlgItem(ID)->GetDC();
HDC hDC= pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage cimg;

cimg.CopyOf(img);
cimg.DrawToHDC(hDC,&rect);

ReleaseDC(pDC);
}

忘了说一下了:StartVideo()是用一个线程调用的,用OnTimer好像会闪烁的。

共有 人打赏支持
粉丝 0
博文 100
码字总数 55732
×
来来叔叔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: