首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV -视频中未处理的异常

OpenCV -视频中未处理的异常
EN

Stack Overflow用户
提问于 2013-11-14 11:22:06
回答 2查看 4.7K关注 0票数 1

我最近安装了OpenCV 2.4.7,并将其配置为我的Visual 2010终极版.我甚至测试了一个显示图像的代码..。

代码语言:javascript
复制
#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);
}

它可以工作,但是当我尝试使用给定这里的视频拍摄代码时,它会出现一个错误。

代码语言:javascript
复制
#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处的未处理异常: Microsoft C++异常:cv::内存位置0x0019f6d8处的异常

我不知道安装是否有问题。我对OpenCV非常陌生,所以如果任何熟悉这个错误的人都能为我修复这个错误,并且给我解释为什么会发生这种错误,那么这方面的指导将是很棒的。

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

EN

回答 2

Stack Overflow用户

发布于 2013-11-14 11:51:02

试着取代

代码语言:javascript
复制
cap >> frame;

通过以下方式:

代码语言:javascript
复制
while (frame.empty()) {
    cap >> frame;
}

有时opencv相机API为前几帧提供了垃圾,但过了一段时间,一切都正常了。

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

票数 3
EN

Stack Overflow用户

发布于 2014-12-10 08:15:47

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

代码语言:javascript
复制
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);

因此,如果您对视频捕获感兴趣,那么使用下面的代码:

代码语言:javascript
复制
#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.It中设置dll链接器选项才能工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19976371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档