Opencv 摄像头在捕获一帧图片时,保存的是黑屏,不知道问题,谁能帮忙改正一下啊,在线等!!!
#include"cxcore.h"#include"cvcam.h"#include"windows.h"#include"highgui.h"intmain(){Ip...
#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "highgui.h"
int main()
{
IplImage* image=NULL;
int camsnums=cvcamGetCamerasCount();//返回可以访问的摄像头数目
HWND MyWin;// 设置系统属性
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //选择第一个摄像头,数字代表第几个摄像头
MyWin=(HWND)cvGetWindowHandle("CameraUSB window"); // 创建一个窗口Mywin,MyWin是窗口HWND的类型
cvcamInit();//初始化摄像头
cvcamStart();// 摄像头开始摄像
cvWaitKey();//等待窗口出现
CvCapture* capture = cvCaptureFromCAM(0);
image=cvQueryFrame(capture);
cvSaveImage("D:\\saveImage.jpg",image);
cvcamStop();//停止摄像头
cvcamExit();//退出
return 0;
} 展开
#include "cvcam.h"
#include "windows.h"
#include "highgui.h"
int main()
{
IplImage* image=NULL;
int camsnums=cvcamGetCamerasCount();//返回可以访问的摄像头数目
HWND MyWin;// 设置系统属性
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //选择第一个摄像头,数字代表第几个摄像头
MyWin=(HWND)cvGetWindowHandle("CameraUSB window"); // 创建一个窗口Mywin,MyWin是窗口HWND的类型
cvcamInit();//初始化摄像头
cvcamStart();// 摄像头开始摄像
cvWaitKey();//等待窗口出现
CvCapture* capture = cvCaptureFromCAM(0);
image=cvQueryFrame(capture);
cvSaveImage("D:\\saveImage.jpg",image);
cvcamStop();//停止摄像头
cvcamExit();//退出
return 0;
} 展开
展开全部
cvWaitKey(); 是延时等待消息,不填参数默认0,当写0的时候消息处于等待状态,
我现在手里没摄像头,没发测试你的程序,不过要我写,我会把这句话放到cvSaveImage()后面
给你一段我以前写的保存图像的代码吧 VS里做的
USES_CONVERSION; //格式转换标志
CvCapture * pCapture = 0; // 用于在视频中捕获图像
IplImage* pFrame = NULL; // 用于存储
int nNum = 0;//帧数
if (!pCapture)
pCapture=cvCreateCameraCapture(-1);
if (!pCapture)
{
AfxMessageBox(_T("无法打开摄像头"));
return;
}
// 获取视频
pCapture = cvCaptureFromCAM(0);
while(pFrame = cvQueryFrame( pCapture ))
{
nNum++;//帧数++
cvShowImage("view",pFrame);
CString str;
str.Format(_T("第%d帧.jpg"),nNum);
cvSaveImage(T2A(str),pFrame);
char cExit = cvWaitKey(2); // 每帧显示2毫秒
if (cExit == 27) // Esc退出
break;
}
......
// 释放略
我现在手里没摄像头,没发测试你的程序,不过要我写,我会把这句话放到cvSaveImage()后面
给你一段我以前写的保存图像的代码吧 VS里做的
USES_CONVERSION; //格式转换标志
CvCapture * pCapture = 0; // 用于在视频中捕获图像
IplImage* pFrame = NULL; // 用于存储
int nNum = 0;//帧数
if (!pCapture)
pCapture=cvCreateCameraCapture(-1);
if (!pCapture)
{
AfxMessageBox(_T("无法打开摄像头"));
return;
}
// 获取视频
pCapture = cvCaptureFromCAM(0);
while(pFrame = cvQueryFrame( pCapture ))
{
nNum++;//帧数++
cvShowImage("view",pFrame);
CString str;
str.Format(_T("第%d帧.jpg"),nNum);
cvSaveImage(T2A(str),pFrame);
char cExit = cvWaitKey(2); // 每帧显示2毫秒
if (cExit == 27) // Esc退出
break;
}
......
// 释放略
追问
求完整的代码,第一次写这个,临时看的,明天就要交啦
追答
都写成这样了 还不完整啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
// 录制视频.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#pragma comment(lib,"highgui210.lib")
#pragma comment(lib,"cv210.lib")
#pragma comment(lib,"cvaux210.lib")
#pragma comment(lib,"cxcore210.lib")
#include "cv.h"
#include "highgui.h"
#include "cvaux.h"
#include "cxcore.h"
#include "string.h"
using namespace std;
#include <iostream>
int main()
{
CvCapture* capture=cvCaptureFromCAM(-1);
CvVideoWriter* video=NULL;
IplImage* frame=NULL;
int FrameW=320;
int FrameH=240;
IplImage *FrameCopy=cvCreateImage(cvSize(FrameW,FrameH),8,3);
int capturenum=0;
int n;
if(!capture) //如果不能打开摄像头给出警告
{
cout<<"Can not open the camera."<<endl;
return -1;
}
else
{
frame=cvQueryFrame(capture); //首先取得摄像头中的一帧
video=cvCreateVideoWriter("P15.avi",-1,32,
cvSize(FrameW,FrameH)); //创建CvVideoWriter对象并分配空间
//保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32
if(video) //如果能创建CvVideoWriter对象则表明成功
{
cout<<"VideoWriter has created."<<endl;
}
cvNamedWindow("Camera Video",1); //新建一个窗口
while(capturenum<=2000)
{
frame=cvQueryFrame(capture); //从CvCapture中获得一帧
cvResize(frame,FrameCopy,1);
capturenum++;
if(!frame)
{
cout<<"Can not get frame from the capture."<<endl;
break;
}
n=cvWriteFrame(video,FrameCopy); //判断是否写入成功,如果返回的是1,表示写入成功
cout<<n<<endl;
cvShowImage("Camera Video",frame); //显示视频内容的图片
if(cvWaitKey(2)>0) break; //有其他键盘响应,则退出
}
cvReleaseVideoWriter(&video);
cvReleaseCapture(&capture);
cvReleaseImage(&FrameCopy);
cvDestroyWindow("Camera Video");
}
return 0;
}
//
#include "stdafx.h"
#pragma comment(lib,"highgui210.lib")
#pragma comment(lib,"cv210.lib")
#pragma comment(lib,"cvaux210.lib")
#pragma comment(lib,"cxcore210.lib")
#include "cv.h"
#include "highgui.h"
#include "cvaux.h"
#include "cxcore.h"
#include "string.h"
using namespace std;
#include <iostream>
int main()
{
CvCapture* capture=cvCaptureFromCAM(-1);
CvVideoWriter* video=NULL;
IplImage* frame=NULL;
int FrameW=320;
int FrameH=240;
IplImage *FrameCopy=cvCreateImage(cvSize(FrameW,FrameH),8,3);
int capturenum=0;
int n;
if(!capture) //如果不能打开摄像头给出警告
{
cout<<"Can not open the camera."<<endl;
return -1;
}
else
{
frame=cvQueryFrame(capture); //首先取得摄像头中的一帧
video=cvCreateVideoWriter("P15.avi",-1,32,
cvSize(FrameW,FrameH)); //创建CvVideoWriter对象并分配空间
//保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32
if(video) //如果能创建CvVideoWriter对象则表明成功
{
cout<<"VideoWriter has created."<<endl;
}
cvNamedWindow("Camera Video",1); //新建一个窗口
while(capturenum<=2000)
{
frame=cvQueryFrame(capture); //从CvCapture中获得一帧
cvResize(frame,FrameCopy,1);
capturenum++;
if(!frame)
{
cout<<"Can not get frame from the capture."<<endl;
break;
}
n=cvWriteFrame(video,FrameCopy); //判断是否写入成功,如果返回的是1,表示写入成功
cout<<n<<endl;
cvShowImage("Camera Video",frame); //显示视频内容的图片
if(cvWaitKey(2)>0) break; //有其他键盘响应,则退出
}
cvReleaseVideoWriter(&video);
cvReleaseCapture(&capture);
cvReleaseImage(&FrameCopy);
cvDestroyWindow("Camera Video");
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询