问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-22 01:30

我来回答

5个回答

热心网友 时间:2024-03-01 11:00

现在在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-03-01 11:00

完整程序如下:
#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;
}
希望可以帮到你!!!

热心网友 时间:2024-03-01 11:06

#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;
}

热心网友 时间:2024-03-01 11:07

用cvsave(filename, model)

热心网友 时间:2024-03-01 11:03

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;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...结构的施工分包给其他单位那么是不是EPC总承包就不能分包 Win11玩不了地平线4如何解决_Win11玩不了地平线4怎么办 Win11玩不了地平线4如何解决_Win11玩不了地平线4怎么解决 地平线5警告显卡内存过低怎么办 极限竞速地平线5闪退怎么解决 极限竞速地平线5闪退解决方法 怎样册除手机屏幕上(精品游戏)图标 烧结普通砖有哪些 烧结普通砖都有哪些 ...4年后的年龄与弟弟3年前的年龄和是35岁。今年哥与弟各几岁??_百度... ...等于弟弟7年后的年龄,哥哥4年后与弟弟3年前的年龄的和是35岁。哥哥... matlab使用imread读取tif文件错误 彩色图像a.jpg应该为3通道图像大小为159kB, 我用op... opencv中Mat数据怎么保存为JPG格式的图片 利用opencv Mat imread 读取图片 求解在VS2010下的opencv查看一图片属性代码。 保存... 4张CMYK单色图片(tif格式,比较大,50454*24083像... opencv从摄像头读取图像怎么改为读取保存好的jpg图片 如何从python中opencv的阵列读取原始PNG 我现在有用opencv得到的jpg格式的一帧图片,请问我... Opencv和Qt QImage格式转Mat Opencv3.0 是不是不支持VS2010 opencv怎样打开RAW格式图像 如何将利用OpenCV加载的图像显示在窗口指定位置 OPENCV库,编程使用OPENCV读取tif格式的影像时,想... 为什么VS2010下OpenCV读取TIFF文件读取失败? OpenCV中怎样在内存中把一个图像转成jpg格式的 安川驱动器报警f.10是什么故障啊? 安川伺服器一通电就报C90,请那位高手指点一下。谢... 安川驱动器报警c10是什么意思 安川伺驱动器报C10是什么意思 C++ opencv 在release构建下无法读取png图片,但是... 为什么用Python的openCV读取图片与PIL读取的图片像... 华为p40 5G价格多少 华为5g手机价格 华为5g手机价格是多少 华为5g多少钱 华为5G手机价格? 贝贝瓜是南瓜吗 普通南瓜和贝贝小南瓜的区别在哪里? 金贝贝瓜属于南瓜吗 贝贝南瓜各地的叫法 贝贝小南瓜和板栗南瓜有什么区别? 贝贝瓜种植时间和方法是什么? 青南瓜是贝贝瓜吗 华为p20微信聊天时语音键不好用 京东白条存5000金条额度多少 京东白条只有100的体验额度,可以申请金条吗 成为b站的一名up(最好是游戏区)应该从什么样的视频... b 站有哪些超有钱的 UP 主? 哔站up主是什么意思