小白一个有关摄像头输出的有关问题(只能运行一次,再运行就报错)
小白求助:一个有关摄像头输出的问题(只能运行一次,再运行就报错)
程序在每次开机后只能正常运行一次,直接关闭窗户或者是按ESC退出后,再运行就会报错。
报错如下:
“CrossDetect.exe 中的 0x74da812f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0027f2e8 处的 cv::Exception。”
求教大神这个是怎么回事啊。
程序源码如下:
但是下面这个摄像头输出程序每次运行时都可以正确运行:
------解决思路----------------------
貌似是 因为太快,没有取到图片,
可以在 cap>>im_cam; 之后加上
if(im_cam.empty()) continue;
你可以运行的程序也有类似的代码
if(!pFrame)break;
至于为什么取不到图片,就不知道了。
------解决思路----------------------
要加 也应该加在 cap>>im_cam 之前吧
------解决思路----------------------
你一个loop早早地完成了,取走cap的第一帧,但之后的loop进来后,cap的第二帧还没拍出来,就只能返回NULL
程序在每次开机后只能正常运行一次,直接关闭窗户或者是按ESC退出后,再运行就会报错。
报错如下:
“CrossDetect.exe 中的 0x74da812f 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0027f2e8 处的 cv::Exception。”
求教大神这个是怎么回事啊。
程序源码如下:
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace cv;
int main()
{
//打开摄像头
VideoCapture cap(0);
Mat im_cam;
//新建一个窗口cam,用于显示摄像头拍摄图像
namedWindow("cam",WINDOW_AUTOSIZE);
while(1)
{
cap>>im_cam;
char c=waitKey(30);
imshow("cam",im_cam);
if(c==27)break;
}
cap.release();
destroyWindow("cam");
return 0;
}
但是下面这个摄像头输出程序每次运行时都可以正确运行:
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main( int argc, char** argv )
{
//声明IplImage指针
IplImage* pFrame = NULL;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(0);
//创建窗口
cvNamedWindow("video", 1);
//显示视屏
while(1)
{
pFrame=cvQueryFrame( pCapture );
char c=cvWaitKey(33);
if(!pFrame)break;
cvShowImage("video",pFrame);
if(c==27)break;
}
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
}
------解决思路----------------------
貌似是 因为太快,没有取到图片,
可以在 cap>>im_cam; 之后加上
if(im_cam.empty()) continue;
你可以运行的程序也有类似的代码
if(!pFrame)break;
至于为什么取不到图片,就不知道了。
------解决思路----------------------
要加 也应该加在 cap>>im_cam 之前吧
------解决思路----------------------
要加 也应该加在 cap>>im_cam 之前吧
加它前面确实好了,不过这是为什么啊。。
你一个loop早早地完成了,取走cap的第一帧,但之后的loop进来后,cap的第二帧还没拍出来,就只能返回NULL