0

Canny エッジ検出器を試したいのですが、開始しようとすると Unhandled 例外が発生します。

canny_project.exe の 0x00007FF97F6C8B9C で未処理の例外: Microsoft C++ 例外: cv::Exception at memory location 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;
}

前もって感謝します

4

3 に答える 3

1

問題は、おそらく cvCaptureFromCAM を間違って使用していることです。

cvCaptureFromCAM(0) // not -1

CコードでOpenCVを使用するのはなぜですか? CvCapture の代わりに VideoCapture を使用してください。

于 2015-02-28T20:15:43.113 に答える
0

cvCaptureFromCAM(-1)の引数が間違っています。接続されているカメラが 1 つだけの場合は、0 を使用してください。また、C API では、動画での作業が終わったら、 でCvCapture構造体を解放するか、デストラクタで自動的に呼び出されるものをcvReleaseCapture()使用します。この例を試して、カメラに適切にアクセスできるかどうかを確認してください。Ptr<CvCapture>cvReleaseCapture()

于 2015-02-28T20:33:10.670 に答える