Canny边缘检测器出现未处理的异常



我想尝试Canny边缘检测器,但当我尝试启动时,我收到一个未处理的异常:

canny_project.exe中0x00007FF97F6C8B9C处未处理的异常:Microsoft C++异常:cv::内存位置0x0000002485D89860 处的异常

下面是我在VS2012中实现的代码。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
using namespace cv;
int main(int, char**)
{
    namedWindow("Edges", CV_WINDOW_NORMAL);
    CvCapture* capture = cvCaptureFromCAM(-1);
    cv::Mat frame; cv::Mat out; cv::Mat out2;
    while (1) {
        frame = cvQueryFrame(capture);
        GaussianBlur(frame, out, Size(5, 5), 0, 0);
        cvtColor(out, out2, CV_BGR2GRAY); // produces out2, a one-channel image (CV_8UC1)
        Canny(out2, out2, 100, 200, 3); // the result goes to out2 again,but since it is still one channel it is fine
        if (!frame.data) break;
        imshow("Edges", out2);
        char c = cvWaitKey(33);
        if (c == 'c') break;
    }
    return 0;
}

提前感谢

问题可能是您错误地使用了cvCaptureFromCAM。

cvCaptureFromCAM(0) // not -1

为什么将OpenCV与C代码一起使用?使用VideoCapture而不是CvCapture。

请尝试此操作,并告诉我是否显示图像,并尝试不同的设备编号:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
using namespace cv;
int main(int, char**)
{
    cv::namedWindow("Capture");
    int deviceNum = 0; // please try different device numbers too like -1, 1, 2, ...
    cv:VideoCapture capture(deviceNum); 
    cv::Mat frame;
    if(!capture.isOpened())
    {
        std::cout << "Could not open device " << deviceNum << std::endl;
        return 0;
    }
    while (true) 
    {
        capture >> frame; // = cvQueryFrame(capture);
        //if (!frame.data) break;
        if(frame.empty())
        {
            std::cout << "could not capture a legal frame" << std::endl;

继续;//断裂;}cv::imshow("捕获",帧);

        char c = cv::waitKey(33);
        if (c == 'c') break;
    }
    std::cout << "press any key to exit" << std::endl;
    cv::waitKey(0); // wait until key pressed
    return 0;
}

cvCaptureFromCAM(-1)有错误的参数,如果只连接了一个相机,请使用0。此外,在C API中,当您完成对视频的处理时,使用cvReleaseCapture()释放CvCapture结构,或者使用在析构函数中自动调用cvReleaseCapture()Ptr<CvCapture>。请尝试一下,这个例子,看看你是否能正确地使用你的相机。

相关内容

  • 没有找到相关文章

最新更新