MFC 摄像头问题 希望高手指点一下

zzzqanddl 2011-10-09 03:59:48
我现在想做一个摄像头监控程序,在网上找了 一下,大部分都是vfw 或者directshow 还需要视频采集卡,我不想用视频采集卡,能不能做一个监控程序,我只要实时的显示图像就行,不需要保存视频文件。我想应该可以吧,因为现在有很多什么自拍软件都能实现的,他们也没有用视频采集卡啊(我自己认为的0.0) 请高手指点一下。在这儿先谢谢了。
...全文
197 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
花花11世界 2013-05-24
  • 打赏
  • 举报
回复
BITMAPINFO m_capwnd;这个是保存图像的 BITMAPINFO信息 ? lpVHdr->lpData 是保存图像数据信息? 我把这两个数据发出去接收方 却还是不能显示 图像信息 这里面需要发什么要的信息过去 接收方才能显示 这幅图像了
libing64 2011-10-18
  • 打赏
  • 举报
回复
用opencv吧~解决问题会快些~
sichuanwww 2011-10-17
  • 打赏
  • 举报
回复
用OpenCV,方便
zzzqanddl 2011-10-17
  • 打赏
  • 举报
回复
谢谢各位的解答了,问题是搞定了,但是现在要在视频的中间加一个红色的十字,标明这个就是中心,这个怎么去加啊,我只懂软件(还是现学现卖),硬件就不懂了,这个红十字是硬件去做还是软件去做啊? 如果是软件,能不能提供一些想法或者是思路,我现在能想到的就是图片的数字水印了,但那个只是图片,如果是用vfw,能不能做到??
觅食的猫猫 2011-10-12
  • 打赏
  • 举报
回复
1 建立一个机遇MFC对话框的工程

2 选择ResourceView选项卡,展开Dialog,双击IDD_(工程名)_DIALOG选项
在界面添加一个静态文本框控件,设置ID为IDC_STATIC_CAMERA,并关联变量CStatic m_stcCamera

3 打开stdafx.h 加入:

#include <vfw.h>
#pragma comment(lib, "vfw32")


4在C(工程名)DLG的类的成员函数BOOL C(工程名)DLG::OnInitDialog()函数中添加:


// TODO: Add extra initialization here
CWnd *pCarryWnd = this->GetDlgItem(IDC_STATIC_CAMERA);//得到预示窗口指针
CRect rect;
pCarryWnd->GetClientRect(&rect);
m_hCameraWnd = capCreateCaptureWindow("MY PC CAMERA", WS_CHILD|WS_VISIBLE,
0, 0, rect.Width(), rect.Width(),
pCarryWnd->GetSafeHwnd(), 0);
if(m_hCameraWnd == NULL)
{
AfxMessageBox("创建视频窗口失败!");
return TRUE;
}

if(!capDriverConnect(m_hCameraWnd, 0)) return TRUE;
CAPDRIVERCAPS cpas;
capDriverGetCaps(m_hCameraWnd,sizeof(CAPDRIVERCAPS), &cpas);
if(cpas.fCaptureInitialized)
{
CAPSTATUS status;
capGetStatus(m_hCameraWnd, &status, sizeof(CAPSTATUS));
capPreviewRate(m_hCameraWnd, 25);
capPreview(m_hCameraWnd, TRUE);
}
return TRUE; }

百事烟 2011-10-11
  • 打赏
  • 举报
回复
用directshow或vfw,不用采集卡的购买USB,1394接口的相机,最便宜的几十元,贵的上万

也可以使用网络摄像头,用厂家提供的SDK取得视频,

如果要夜视效果,还要搭配红外,可采用红外一体机
寂寞的秋叶 2011-10-11
  • 打赏
  • 举报
回复
opencv来实现,以下是主要代码:
IplImage * cimg;
//打开摄像头
if( !(pCapture = cvCaptureFromCAM(-1)))
{
fprintf(stderr,"Can not open camera.\n");
}

//逐帧读取视频
while(pFrame = cvQueryFrame( pCapture ))
{
if(video_flag==1) break;
//显示图像

cimg=cvCloneImage(pFrame);
cvFlip(cimg,NULL,0);
CDC *pDC = GetDlgItem(IDC_MAINPIC)->GetDC();
HDC hDC= pDC->GetSafeHdc();
CRect rect;
GetDlgItem(IDC_MAINPIC)->GetClientRect(&rect);
cimg.CopyOf(pFrame);
cimg.DrawToHDC(hDC,&rect);
}
天鹅梦 2011-10-11
  • 打赏
  • 举报
回复
用directshow ,不用采集卡一样的,可以枚举设备的,实在不行,用OpenCV也可以,方便
wangyingyingqq 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 f562158232 的回复:]
只要实时显示的话,预览就可以

这题目送分啊!!

capCreatCaptureWindow()函数创建一个捕获窗口

capPreview(m_hCameraWnd,TRUE);//设置预览
[/Quote]麻烦能详细说一下吗,小白一个唉
a314867466 2011-10-09
  • 打赏
  • 举报
回复
不懂解答
觅食的猫猫 2011-10-09
  • 打赏
  • 举报
回复
只要实时显示的话,预览就可以

这题目送分啊!!

capCreatCaptureWindow()函数创建一个捕获窗口

capPreview(m_hCameraWnd,TRUE);//设置预览

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧