2015-07-08 14 views
6

Hallo ich versuche, diesen Beispielcode von OpenCV auszuführen:OpenCV Fehler: Assertion fehlgeschlagen (scn == 3 || scn == 4) in cv :: cvtColor, Datei .. .. .. .. opencv modules imgproc src color.cpp, Zeile 3737

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

ich bin derzeit ein Windows 7 x64 Boot Camp auf einem Macbook Pro. Ich führe diesen Code mit Visual Studios 2013 und OpenCV 2.4.9.

Dies ist, wie ich habe meine einrichten Config Eigenschaften:

VC++ Directories: Include Directories: H:\opencv\build\include;$(IncludePath) 

Linker:General:Additional Library Directories: H:\opencv\build\x64\vc12\lib;%(AdditionalLibraryDirectories) 
Linker:Input:Additional Dependencies: opencv_calib3d249.lib;opencv_contrib249.lib;opencv_core249.lib;opencv_features2d249.lib;opencv_flann249.lib;opencv_gpu249.lib;opencv_highgui249.lib;opencv_imgproc249.lib;opencv_legacy249.lib;opencv_ml249.lib;opencv_nonfree249.lib;opencv_objdetect249.lib;opencv_ocl249.lib;opencv_photo249.lib;opencv_stitching249.lib;opencv_superres249.lib;opencv_ts249.lib;opencv_video249.lib;opencv_videostab249.lib;%(AdditionalDependencies) 

Wenn ich auf lokale Windows-Debugger in Release x64-Modus bekomme ich folgende Fehler aus Visual Studios:

First-chance exception at 0x000007FEFD21B3DD in Project3.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000000019A8A0.

If there is a handler for this exception, the program may be safely continued.

Wenn ich stattdessen auf Pause klicke (Angst, Continue zu drücken), erscheint ein Fenster namens Edges und die Kamera schaltet sich ein, da das grüne Licht aufleuchtet. Aber ich habe auch die folgenden Fehler in dem Befehlsfenster:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv:: cvtColor, file ........\opencv\modules\imgproc\src\color.cpp, line 3737

Ich bin ziemlich neu in C++ und Visual Studios, jede mögliche Hilfe würde geschätzt. Danke im Voraus!

+0

funktioniert für mich "wie es ist". Dieser Fehler sollte bedeuten, dass Ihr Bild nicht RGB ist. – Miki

+0

Sorry @Miki Ich bin sehr neu dazu. Wenn mein Bild nicht RGB ist, was soll ich tun, um es zu reparieren? –

+0

Der Code funktioniert gut (es ist copy & paste aus den opencv-Dokumenten, richtig?), Also ist es kein Problem mit dem Code. Versuchen Sie, 'std :: cout << frame.channels(); std :: cout << kanten.channels();' vor cvtColor, es sollte eine Menge von 31 – Miki

Antwort

3

Von der Konversation in den Kommentaren zu der Frage haben wir gesehen, dass VideoCapture Frame in Graustufen gibt. So verursachte der Aufruf an cvtColor den Absturz.

... 
Mat frame; 
cap >> frame; // frame is already CV_8UC1 
//cvtColor(frame, edges, CV_BGR2GRAY); // so don't to convert here, or crash! 
edges = frame.clone(); 
... 
+0

Ich denke Videocapture gibt Frames in BGR. Ich benutze etwas ähnliches und es gibt denselben Fehler. Wenn ich cvtColor entferne, erhalte ich immer noch den Fehler. – CODError

+0

'VideoCapture' gibt normalerweise Frames in BGR. Dieser Fall war anders. Wenn Sie ein anderes Problem haben, stellen Sie bitte eine neue Frage @CODError – Miki

Verwandte Themen