使用MFC获取USB摄像头图像保存并在单窗口指定位置显示

使用MFC获取USB摄像头图像保存并在单窗口指定位置显示,第1张

openCV采集摄像并保存

我用代码

#include "cvh"

#include "highguih"

void main()

{

CvCapture capture;

capture=cvCreateCameraCapture(0);

assert(capture!=NULL);

IplImage frame;

cvNamedWindow("camera",1);

while(1)

{

frame=cvQueryFrame(capture);

if(!frame)

break;

cvShowImage("camera",frame);

if(cvWaitKey(33)>=0)

break;

}

cvReleaseImage(&frame);

cvDestroyWindow("camera");

}

连接摄像获取数据保存作呢(jpg)

一个界面显示摄像头采集的视频就可以了?用MFC拖一个PICTURE控件上去,另外再加几句代码就行。。我这边有个,但是不知道仍哪里了。。。就几个函数。

opencv里面专门设置分辨率的函数根本不起作用。我也是学习者,后来网上查找了手动更改opencv里面的文件/modules/highgui/src/cap_v4lcpp 里面的#define DEFAULT_V4L_WIDTH 640再重新编译opencv。调用设置分辨率才行的。我是在linux下的,驱动本来就不好,也一卡卡的。但是如果offline处理的话,可以自己设置帧率。。。我用的是24版本的

楼主可以实现web查看到容易配置实现实时监看,但无法控制打开或关闭

在安装有摄像头的机器上配置一个RealServer和RealProduct

RealProduct负责从摄像头采集信息,然后把采集到的信息发送给RealServer

由RealServer再使用web的形式广播出去

int intWidth=thispanel_VedioWidth;

int intHeight=thispanel_VedioHeight;

int intDevice=0;

string refDevice=intDeviceToString();

hHwnd=Form1capCreateCaptureWindowA(ref refDevice,1342177280,0,0,640,480,thispanel_VedioHandleToInt32(),0);

thisLbSysMsgText= " ";

thisLbSysMsgText+= "驱动: "+refDevice;

if(Form1SendMessage(hHwnd,0x40a,intDevice,0)> 0)

{

Form1SendMessage(thishHwnd,0x435,-1, 0);

Form1SendMessage(thishHwnd,0x434,0x42, 0);

Form1SendMessage(thishHwnd,0x432,-1, 0);

Form1SetWindowPos(thishHwnd,1,0,0,intWidth,intHeight,6);

thisBtnCapTureEnabled=false;

thisBtnStopEnabled=true;

}

现在在vc上采集视频常用的方法有三:vfw,directshow,opencv

你是要进行图像处理的话推荐opencv(具体参考:于仕琪,opencv教程基础篇中的例3-6,稍作修改,估计就能用于你的工程)

下面贴出我自己编的一个小工程:如有疑问,E-mail:zhoutingzhi@gmailcom

进行opencv的预备 *** 作你要看那本书和逛opencv中文网

如有问题可以和我讨论(我也是菜鸟,刚为解决了这个问题窃喜不已)。

1新建mfc对话框工程,在其中添加一个picture控件,除了ID以外什么都不用改

2在对话框头文件(没有Dlg那个)中添加(最好是在“#include "resourceh" // main symbols之后”):

#include "cxcoreh"

#include "cvcamh"

#include "windowsh"

#include "cvh"

#include "highguih"

3在工程-》设置-》选择所有配置-》link(连接)-》对象/库模块-》中添加:

kernel32lib user32lib gdi32lib winspoollib comdlg32lib advapi32lib shell32lib ole32lib oleaut32lib uuidlib odbc32lib odbccp32lib cxcorelib cvlib mllib cvauxlib highguilib cvcamlib

4在需要触发摄像头显示的地方添加:

void CVideomfcDlg::OnButton1()

{

// TODO: Add your control notification handler code here

int ncams = cvcamGetCamerasCount( );//返回可以访问的摄像头数目

HWND MyWin=::GetDlgItem(m_hWnd,IDC_VIDEO); //获得控件句柄(IDC_VIDEO就是控件)

cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //选择第一个摄像头

int width=240;

int height=240;

cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); // Selects a window for

cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);

cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);

cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback1);

//回调函数将处理每一帧

cvcamInit( );

cvcamStart( );

}

5改变显示的图像序列大小,在窗口属性设定了以后,添加如下代码:

int width=320; //这个就是需要显示的窗口大小

int height=240; //根据自己需要选择

cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);

cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);

6在对话框类中添加callback成员函数(注意,在添加函数的时候,一定要选择static,不选的话你就自己郁闷去吧,反正我是为了这个郁闷了2个礼拜)

void CVideomfcDlg::callback1(IplImage image)

{

IplImage image1 = image;

int i,j;

assert (image);

//获取当前系统时间

SYSTEMTIME st2=;

GetLocalTime(&st2);

char sss[18]=; //这个是用来存储所要保存的名的,用的是一个笨办法,先定义,再修改其中的数组值。

sss[7]=st2wHour/10+48; //获取系统当前小时

sss[8]=st2wHour%10+48;

sss[9]=st2wMinute/10+48; //获取系统当前分钟

sss[10]=st2wMinute%10+48;

sss[11]=st2wSecond/10+48; //获取系统当前秒

sss[12]=st2wSecond%10+48;

cvSaveImage(sss,image1); //使用系统当前时间为名称(XXXXXXjpg)存储

}

ps:你还需要在c盘根目录下建立一个叫1的文件夹保存。

祝你成功!

以上就是关于使用MFC获取USB摄像头图像保存并在单窗口指定位置显示全部的内容,包括:使用MFC获取USB摄像头图像保存并在单窗口指定位置显示、求C++调用opencv设置获取摄像头图像大小的方法、asp 获取 远程电脑摄像头的图像,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10039952.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存