openCV采集摄像头图片并保存的方法

openCV采集摄像头图片并保存的方法我是用以下代码#include"cv.h"#include"highgui.h"voidmain(){CvCapture*captu... openCV采集摄像头图片并保存的方法

我是用以下代码
#include "cv.h"
#include "highgui.h"
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)
展开
 我来答
兔小牛0b
2011-05-18 · TA获得超过325个赞
知道小有建树答主
回答量:387
采纳率:100%
帮助的人:177万
展开全部
现在在vc上采集视频常用的方法有三:vfw,directshow,opencv

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

下面贴出我自己编的一个小工程:如有疑问,E-mail:zhoutingzhi@gmail.com
进行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的文件夹保存图片。
祝你成功!
深圳量子动力
2024-10-28 广告
双目摄像头是量子动力(深圳)计算机科技有限公司在机器视觉与立体视觉领域应用的关键组件。它通过模拟人类双眼的视觉机制,利用两个摄像头从稍有不同的角度捕捉同一场景,进而通过复杂的算法计算两幅图像之间的视差,从而重建出场景的三维信息。这一技术在自... 点击进入详情页
本回答由深圳量子动力提供
落实思树者
2011-06-01 · TA获得超过990个赞
知道小有建树答主
回答量:213
采纳率:100%
帮助的人:163万
展开全部
完整程序如下:
#include "stdafx.h"
#include <cstdio>
#include <highgui.h>
int main()
{
IplImage *pImg = NULL;
CvCapture *cap = cvCaptureFromCAM(0);
char fileName[100];
char key;
int count = 0;

while(1)
{
pImg = cvQueryFrame(cap);
cvFlip(pImg, NULL, 1); //水平翻转图像,像照镜子一样,不想要这个效果可以去掉此句
key = cvWaitKey(50);
if(key == 27) break; //按ESC键退出程序
if(key == 'c') //按c键拍照
{
sprintf(fileName, "Picture %d.jpg", ++count); //生成文件名
cvSaveImage(fileName, pImg);
cvXorS(pImg, cvScalarAll(255), pImg); //将拍到的图像反色(闪一下形成拍照效果)
cvShowImage("Camera",pImg);
cvWaitKey(200); //反色图像显示ms
}
cvShowImage("Camera",pImg);
}
cvReleaseCapture(&cap);
return 0;
}
希望可以帮到你!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慎重还可靠灬宝贝f
2015-09-01 · TA获得超过12.9万个赞
知道大有可为答主
回答量:1.9万
采纳率:52%
帮助的人:2609万
展开全部
#include "stdafx.h"

#include "cv.h"
#include "highgui.h"

int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage* frame = 0;

capture = cvCaptureFromAVI("video.avi");
//capture = cvCaptureFromCAM( 0 ); //使用摄像头 就换成这句

double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //视频帧率
//int fps=25; //捕捉帧率 ,影响生产的文件的播放速度

frame = cvQueryFrame( capture ); //先捕获一帧

CvVideoWriter* writer = 0; //保存就加上这句
int isColol=1;
//int frameW=640;
//int frameH=480;
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('F','L','V','1'),fps,cvSize(frame->width,frame->height),isColol);//这里大小随便设好像不行

//cvNamedWindow( "窗口", 1 );

//for(int i=0;i<50;i++) //2秒
for(;;) //一直读
{
frame = cvQueryFrame( capture );

cvWriteFrame(writer,frame );

cvShowImage( "窗口", frame ); //显示一帧图像
cvWaitKey(1000 / fps);//视频速度
}

cvReleaseVideoWriter(&writer);
cvReleaseImage(&frame);
cvReleaseCapture( &capture );
cvDestroyWindow("窗口");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泪之梦幻
2015-08-19 · TA获得超过2211个赞
知道小有建树答主
回答量:304
采纳率:100%
帮助的人:57万
展开全部
opencv的学习,推荐《opencv教程——基础篇》,其中第三章有对视频的详细讲解,下面贴出代码:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage* frame = 0;
capture = cvCaptureFromAVI("video.avi");
//capture = cvCaptureFromCAM( 0 ); //使用摄像头 就换成这句
double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //视频帧率
//int fps=25; //捕捉帧率 ,影响生产的文件的播放速度
frame = cvQueryFrame( capture ); //先捕获一帧
CvVideoWriter* writer = 0; //保存就加上这句
int isColol=1;
//int frameW=640;
//int frameH=480;
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('F','L','V','1'),fps,cvSize(frame->width,frame->height),isColol);//这里大小随便设好像不行
//cvNamedWindow( "窗口", 1 );
//for(int i=0;i<50;i++) //2秒
for(;;) //一直读
{
frame = cvQueryFrame( capture );
cvWriteFrame(writer,frame );
cvShowImage( "窗口", frame ); //显示一帧图像
cvWaitKey(1000 / fps);//视频速度
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&frame);
cvReleaseCapture( &capture );
cvDestroyWindow("窗口");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chensuchang
2011-05-18 · TA获得超过6399个赞
知道大有可为答主
回答量:6655
采纳率:50%
帮助的人:4937万
展开全部
用cvsave(filename, model)

参考资料: http://hi.baidu.com/lin65505578/blog/item/d3bbc93b0df53c3197ddd817.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式