1

我最近安装了 OpenCV 2.4.7 并将其配置到我的 Visual Studio 2010 Ultimate ide...我什至测试了一个代码来显示图像...

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

它可以工作,但是当我尝试使用这里给出的视频捕获代码时,它给出了一个错误..

#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++ 异常:内存位置 0x0019f6d8 处的 cv::Exception

不知道是不是安装的问题。我对 OpenCV 很陌生,并且不太了解,所以如果任何习惯于此的人都可以为我解决此错误,并解释为什么会发生这种情况,并且对此提供指导会很棒。

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

4

2 回答 2

3

尝试更换

cap >> frame;

和:

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

有时opencv相机API会在前几帧产生垃圾,但过了一段时间一切正常。

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

于 2013-11-14T11:51:02.307 回答
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。它将起作用!

于 2014-12-10T08:15:47.693 回答