Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
601 views
in Technique[技术] by (71.8m points)

c++ - OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv:: cvtColor, file ........opencvmodulesimgprocsrccolor.cpp, line 3737

Hi I am trying to run this sample code from OpenCV:

#include "opencv2opencv.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;
}

I am currently using a Windows 7 x64 BootCamp on a Macbook Pro. I'm running this code with Visual Studios 2013 and OpenCV 2.4.9.

This is how I've set up my Config Properties:

VC++ Directories: Include Directories: H:opencvuildinclude;$(IncludePath)

Linker:General:Additional Library Directories: H:opencvuildx64vc12lib;%(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)

When I click on Local Windows Debugger in Release x64 mode I get the following error from 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.

When I click Break instead (scared to press Continue), a window named Edges does pop up and the camera does turn on since the green light turns on. But I also get the following error in the command window:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv:: cvtColor, file ........opencvmodulesimgprocsrccolor.cpp, line 3737

I'm pretty new to C++ and Visual Studios, any help would be appreciated. Thanks in advance!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

From the conversation in the comments to the question, we saw that VideoCapture gives frame in grayscale. So the call to cvtColor caused the crash.

...
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(); 
...

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...