2013-11-14 69 views
1
未处理的异常

我最近安装的OpenCV 2.4.7,并将其配置为我的Visual Studio 2010 IDE终极...我甚至测试代码来显示图像...OpenCV的 - 在Videocapture

#include "opencv2/highgui/highgui.hpp" 
#include "iostream" 

using namespace cv; 
using namespace std; 

int main() 
{ 
    Mat im = imread("d:/lena.jpg"); 
    if (im.empty()) 
    { 
     cout << "Cannot load image!" << endl; 
     return -1; 
    } 
    imshow("Image", im); 
    waitKey(0); 
} 

,它作品,但是当我尝试使用给予here的videocapture代码,它给出了一个错误..

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

    Mat edges; 
    namedWindow("edges",1); 
    for(;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     cvtColor(frame, edges, CV_BGR2GRAY); 
     GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
     Canny(edges, edges, 0, 30, 3); 
     imshow("edges", edges); 
     if(waitKey(30) >= 0) break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 
在myNewOpenCv1.exe

未处理的异常在0x75dc812f:微软C++异常:内存位置0x0019 CV ::异常f6d8

我不知道它是否与安装有问题。我对OpenCV非常陌生,不太了解,如果熟悉这个的人可以为我解决这个错误,并且给我一个解释,为什么会发生这种情况,并且在这方面的指导会很棒。

希望等待着你的答案 - 乔纳森 -

+0

你在'path'设置中设置了opencv dll路径吗? –

+0

你的意思是环境变量,是啊...我添加了opencv \ build \ x86 \ vc10 \ bin到路径变量中......但它不起作用,请帮助我 –

+0

确定然后再尝试其他的东西,在处理之前该框架检查它不是“空”或“NULL”。把你的处理块放在'if'里面,看看发生了什么? –

回答

3

尝试更换

cap >> frame; 

有:

while (frame.empty()) { 
    cap >> frame; 
} 

有时OpenCV的摄像头API使垃圾在第几帧,但经过一切都有效。

您可能希望将该循环限制为固定次数的迭代以避免无限运行。

+0

我试过你说的,但它仍然显示错误,我甚至尝试设置for循环的限制,但没有用... –

+0

嘿,谢谢你的支持。但是,无论如何,我想出了它,而不是改变'cap >> frame'块到while语句,我放置了图像处理和显示代码if(!frame.empty())GaussianBlur(边,边,大小(7,7),1.5,1。5); Canny(边缘,边缘,0,30,3); imshow(“边缘”,边缘); if(waitKey(30)> = 0)break; \t \t imshow(“edges”,frame); if(waitKey(30)> = 0)break; \t \t}在if语句中,只有当帧矩阵不为空时才执行 –

0

以下代码行仅用于边缘检测。

cvtColor(frame, edges, CV_BGR2GRAY); 
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
Canny(edges, edges, 0, 30, 3); 

所以,如果你有兴趣,在短短的视频捕捉,然后使用下面的代码:

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

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

要运行该代码,你应该设置在VS库路径,以及你应该设置VS中的链接器选项中的DLL。它将工作!