我正在尝试从立体网络摄像头捕获帧/图像。 imshow工作得很好但是当我按下捕获键99来保存两个相机的帧时它会给出异常
Unhandled exception at 0x005a13af (msvcr100d.dll) in OpencvConfig.exe: 0xC0000005: Access violation reading location 0x7466656c
然后停止工作。请在这方面帮助我。我正在使用OpenCV_2.4.11和Visual Studio 2010.
这是我的源代码
//This works for me on OpenCV 2.0 with 2 Logicool webcams.
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
int main(int, char**)
{
//To capture images pre variables
int key = 0;
string nameL = "left";
string nameR = "right";
char bufferL[20];
char bufferR[20];
int counter = 0;
////////////////////////////////
cv::VideoCapture capLeft(0); // open the Left camera
cv::VideoCapture capRight(1); // open the Right camera
if(!capLeft.isOpened() || !capRight.isOpened()) // check if we succeeded
{
std::cerr << "ERROR: Could not open cameras." << std::endl;
return -1;
}
cv::namedWindow("Left",1);
cv::namedWindow("Right",1);
for(;;)
{
bool isValid = true;
cv::Mat frameLeft;
cv::Mat frameRight;
try
{
capLeft >> frameLeft; // get a new frame from left camera
capRight >> frameRight; //get a new frame from right camera
}
catch( cv::Exception& e )
{
std::cout << "An exception occurred. Ignoring frame. " << e.err << std::endl;
isValid = false;
}
if (isValid)
{
try
{
//Capture Frames and save them
while(key!=27)
{
capLeft >> frameLeft; // get a new frame from left camera
capRight >> frameRight; //get a new frame from right camera
cv::imshow("Left", frameLeft);
cv::imshow("Right", frameRight);
if(key==99)
{
sprintf(bufferL,"%s%s.ppm",nameL,counter);
imwrite(bufferL,frameLeft);
sprintf(bufferR,"%s%s.ppm",nameR,counter);
imwrite(bufferR,frameRight);
}
key = waitKey(700);
counter++;
}
/////////////// Cool stuff ends
}
catch( cv::Exception& e )
{
std::cout << "An exception occurred. Ignoring frame. " << e.err << std::endl;
}
}
if(cv::waitKey(30) >= 0) break;
}
//the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}