2015-07-08 13 views
6

Ciao sto cercando di eseguire questo codice di esempio da OpenCV:Errore OpenCV: asserzione non riuscita (scn == 3 || scn == 4) in cv :: cvtColor, file .. .. .. .. opencv modules imgproc src color.cpp, linea 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; 
} 

attualmente sto usando un Windows 7 x64 BootCamp su un MacBook Pro. Sto eseguendo questo codice con Visual Studios 2013 e OpenCV 2.4.9.

Ecco come ho impostato il mio Properties config:

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) 

Quando clicco sul locale di Windows Debugger in modalità di rilascio x64 ottengo il seguente errore da Studios visivi:

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.

Quando faccio clic su Break invece (paura di premere Continua), viene visualizzata una finestra denominata Edges e la fotocamera si accende da quando si accende la luce verde. Ma ho anche ottenere il seguente errore nella finestra di comando:

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

Sono abbastanza nuovo per C++ e Visual Studio, qualsiasi aiuto sarebbe apprezzato. Grazie in anticipo!

+0

funziona per me "come è". Questo errore dovrebbe significare che il tuo frame non è RGB. – Miki

+0

Mi dispiace @Miki Sono molto nuovo a questo. Se il mio frame non è RGB, cosa dovrei fare per risolverlo? –

+0

Il codice funziona bene (è copia e incolla dai documenti opencv, giusto?), Quindi non è un problema con il codice. Prova ad aggiungere 'std :: cout << frame.channels(); std :: cout << edges.channels();' prima di cvtColor, dovrebbe stampare un sacco di 31 – Miki

risposta

3

Dalla conversazione nei commenti alla domanda, abbiamo visto che VideoCapture dà frame in scala di grigi. Quindi la chiamata a cvtColor ha causato l'arresto anomalo.

... 
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

Penso che la videocaptura dia i frames in BGR. Sto usando qualcosa di simile e dà lo stesso errore. Se rimuovo cvtColor, ottengo ancora l'errore. – CODError

+0

'VideoCapture' di solito dà frame in BGR. Questo caso era diverso. Se hai un altro problema, ti preghiamo di fare una nuova domanda @CODError – Miki