OpenCV错误:在cv :: cvtColor的文件..\..\..\..\opencv\modules\imgproc\src\color.cpp的第3737行中断言失败(scn == 3 || scn == 4)。

7

你好,我正在尝试运行OpenCV的示例代码:

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

我目前正在使用Macbook Pro上的Windows 7 x64 BootCamp。我使用Visual Studios 2013和OpenCV 2.4.9运行此代码。
以下是我的配置属性设置:
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)

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

在 Project3.exe 中 0x000007FEFD21B3DD 处发生一次“First-chance exception”: Microsoft C++ 异常:cv::Exception,位于内存位置 0x000000000019A8A0。

如果有此异常的处理程序,则可以安全地继续运行程序。

当我单击“中断”按钮(害怕按“继续”),窗口名为“Edges”的窗口会弹出,并且相机会打开,因为绿色灯亮起。但是,在命令窗口中也会收到以下错误消息:

OpenCV 错误:在 cv::cvtColor 中断言失败(scn == 3 || scn == 4),文件 ........\opencv\modules\imgproc\src\color.cpp,行 3737

我对 C++ 和 Visual Studios 相当陌生,希望能得到帮助。提前感谢!

原样对我有效。该错误应该意味着您的帧不是 RGB。 - Miki
抱歉 @Miki,我对此非常陌生。如果我的框架不是 RGB,我该怎么办才能解决呢? - Joissa.R
所以它没有进入for循环? - Miki
@Miki Oh,实际上我没有注意到,在错误之前它只打印了“11”。 - Joissa.R
@Miki 谢谢!问题已经解决了。 - Joissa.R
显示剩余4条评论
1个回答

3

从问题的评论交流中,我们看到VideoCapture以灰度方式给出帧。所以调用cvtColor导致了崩溃。

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

我认为videocapture以BGR格式提供帧。我正在使用类似的东西,它会给出相同的错误。如果我删除cvtColor,我仍然会得到错误。 - CODError
VideoCapture 通常会以 BGR 格式提供帧。但这种情况不同。如果您有其他问题,请在 @CODError 提出新问题。 - Miki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接