2015-07-08 8 views
6

Cześć próbuję uruchomić ten przykładowy kod z OpenCV:Błąd OpenCV: Asercja nie powiodła się (scn == 3 || scn == 4) w cv :: cvtColor, plik .. .. .. .. opencv modules imgproc src color.cpp, line 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; 
} 

obecnie używam Windows 7 x64 BootCamp na Macbook Pro. Używam tego kodu z Visual Studios 2013 i OpenCV 2.4.9.

ten sposób mam skonfigurować Config Właściwości:

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) 

Kiedy klikam na lokalnym systemie Windows Debugger w trybie x64 Release pojawia się następujący błąd z 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.

Po kliknięciu przycisku Przerwij (boję się nacisnąć Kontynuuj), pojawi się okno o nazwie Krawędzie, a kamera włącza się, gdy zapali się zielone światło. Ale również pojawia się następujący błąd w oknie poleceń:

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

Jestem całkiem nowy, C++ i Visual Studio, każda pomoc będzie mile widziane. Z góry dziękuję!

+0

działa dla mnie "tak jak jest". Ten błąd powinien oznaczać, że twoja ramka nie jest RGB. – Miki

+0

Sorry @Miki Jestem bardzo nowy w tym. Jeśli moja ramka nie jest RGB, co mam zrobić, aby to naprawić? –

+0

Kod działa poprawnie (jest kopiowany i wklejany z dokumentacji OpenCV, prawda?), Więc nie jest to problem z kodem. Spróbuj dodać 'std :: cout << frame.channels(); std :: cout << edges.channels();' before cvtColor, powinno wydrukować dużo 31 – Miki

Odpowiedz

3

Z rozmowy w komentarzach do pytania zobaczyliśmy, że VideoCapture podaje ramkę w skali szarości. Tak więc połączenie z cvtColor spowodowało awarię.

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

Myślę, że videocapture daje ramki w BGR. Używam czegoś podobnego i daje ten sam błąd. Jeśli usunę cvtColor, nadal otrzymam błąd. – CODError

+0

'VideoCapture' zwykle daje klatki w BGR. Ta sprawa była inna. Jeśli masz inny problem, zadaj nowe pytanie @CODError – Miki

Powiązane problemy