OpenCV 错误:断言失败 (scn == 3 || scn == 4) in cv:: cvtColor, file ........opencvmodulesimgprocsrccolor.cpp, line 3737

我正在尝试从 OpenCV 运行此示例代码:

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

我目前在 Macbook Pro 上使用 Windows 7 x64 BootCamp.我正在使用 Visual Studios 2013 和 OpenCV 2.4.9 运行此代码.

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)

当我在 Release x64 模式下单击本地 Windows 调试器时,我从 Visual Studios 收到以下错误:

When I click on Local Windows Debugger in Release x64 mode I get the following error from Visual Studios:

Project3.exe 中 0x000007FEFD21B3DD 处的第一次机会异常:Microsoft C++ 异常:内存位置的 cv::Exception0x000000000019A8A0.

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.

当我改为单击 Break(害怕按 Continue)时,会弹出一个名为 Edges 的窗口,并且由于绿灯亮起,相机确实打开了.但我也在命令窗口中收到以下错误:

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 错误:CV 中的断言失败 (scn == 3 || scn == 4)::cvtColor,文件........opencvmodulesimgprocsrccolor.cpp,行3737

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

我是 C++ 和 Visual Studios 的新手,任何帮助将不胜感激.提前致谢!

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

推荐答案

从评论中的对话到问题,我们看到 VideoCapture 以灰度显示帧.所以调用 cvtColor 导致了崩溃.

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

相关文章