OpenCV SIGSEGV C ++ minGW

Даже в простой программе была ошибка с памятью и исключением. Кодовые блоки + mingw в отладке — SIGSEGV, стек вызовов — user32.dll. Во время выполнения происходит сбой с ошибкой 0xc0000005.
VC тоже падает с необработанным исключением.

#include "opencv2/video/tracking.hpp"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv/cv.h"#include "opencv/highgui.h"
#include <iostream>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //cvCaptureFromCAM( 0 );
assert( capture );

IplImage* frame=0;

cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);

int counter=0;
char filename[512];

while(true){

frame = cvQueryFrame( capture );cvShowImage("capture", frame);

char c = cvWaitKey(33);
if (c == 27) {
break;
}

}

cvReleaseCapture( &capture );
cvDestroyWindow("capture");
return 0;
}

0

Решение

Я не вижу ошибок в вашем коде. Может быть, это некоторые ошибки библиотеки.

Но почему вы используете эту старую версию OpenCV.
С C ++ это проще

#include "opencv2/opencv.hpp"
using namespace cv;

int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened())  // check if we succeeded
return -1;

while(true)
{
Mat frame;
cap >> frame; // get a new frame from camera
imshow("frame", frame);
if(waitKey(30) >= 0) break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
1

Другие решения

Вы пытались обменять эти строки:

cvDestroyWindow("capture");

а также

cvReleaseCapture( &capture );

Я считаю, что вы должны позвонить cvDestroyWindow прежде чем cvReleaseCapture, Я думаю, что окно стало владельцем capture и должен быть уничтожен первым.

0

По вопросам рекламы [email protected]