Pregunta

I'm trying to run an example in OpenCV's documentation as following

#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv\cv.h>


int main(int argc, char **argv)
{   
    cv::VideoCapture cap(0);
    if ( !cap.isOpened())
    {
        std::cout << "Error with opening Camera" << std::endl;
        return -1;
    }

    cv::Mat frame, edges;
    cv::namedWindow("edges", 1);
    for(;;)
    {
        cap >> frame;
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, cv::Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        cv::imshow("edges", edges);
        if ( cv::waitKey(30) >= 0) break;
    }

    return 0;
}

I have if statement to check if anything goes wrong with Camera, it should terminate the program but this is not the case. This is the error that I got

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file C:\opencv_2_4_8\opencv\sources\modules\imgproc\src\color.cpp, line 3737
terminate called after throwing an instance of 'cv::Exception'
  what():  C:\opencv_2_4_8\opencv\sources\modules\imgproc\src\color.cpp:3737: error: (-215) scn == 3 || scn == 4 in function cvtColor


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
¿Fue útil?

Solución

By looking at the OpenCV code in "color.cpp" it looks like the variable "scn" mentioned in the error is the number of channels of the frame, and the conversion type (BGR -> grayscale) requires there to be 3 or 4 channels:

Assertion failed (scn == 3 || scn == 4)

Are you sure your camera isn't providing grayscale images by default? Try commenting out the lines that process the frame and show only the retrieved image and see what you get. Or just put a breakpoint right after the frame capture and inspect the "frame" variable - is it empty? does it have the expected size and so on?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top