求救:帮忙注释程序openCV做的一个每50ms从摄像头取一张图像的程序

求救:帮忙注释程序openCV做的一个每50ms从摄像头取一张图像的程序,第1张

int main(int argc,char** argv) //main函数

{

cvNamedWindow("Demo")//声明窗口

CvCapture* capture=cvCreateCameraCapture(0)//声明摄像头类型的变量

IplImage* frame//声明图像

while(1)//循环

{

frame=cvQueryFrame(capture)//从摄像头中读取一帧

if(!frame) break//如果错误,跳出循环

cvShowImage("Demo",frame)//在窗口中显示图像

char c=cvWaitKey(50)//等待按键事件

if(c==27) break//如果按ESC键,跳出循环

}

cvReleaseCapture(&capture)//释放capture

cvDestroyWindow("Demo")//销掉窗口

}

建议你用cvcam这个库的函数调用,来实现对话框式的摄像头选择,这样就不会出问题了,具体的可以百度下,那个库在高版本中的opencv里都被剔除了,你可以下一个低版本编译后使用里面的函数......

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

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

下面贴出我自己编的一个小工程:如有疑问,E-mail:[email protected]

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

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

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

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

#include "cxcore.h"

#include "cvcam.h"

#include "windows.h"

#include "cv.h"

#include "highgui.h"

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

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib

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]=st2.wHour/10+48//获取系统当前小时

sss[8]=st2.wHour%10+48

sss[9]=st2.wMinute/10+48//获取系统当前分钟

sss[10]=st2.wMinute%10+48

sss[11]=st2.wSecond/10+48//获取系统当前秒

sss[12]=st2.wSecond%10+48

cvSaveImage(sss,image1)//使用系统当前时间为名称(XXXXXX.jpg)存储图片

}

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

祝你成功!


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

原文地址: https://outofmemory.cn/yw/11560354.html

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

发表评论

登录后才能评论

评论列表(0条)

保存