【问题标题】:OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv:: cvtColor, file ..\..\..\..\opencv\modules\imgproc\src\color.cpp, line 3737OpenCV 错误: cv:: cvtColor,文件 ..\..\..\..\opencv\modules\imgproc\src\color.cpp 中的断言失败 (scn == 3 || scn == 4),第 3737 行
【发布时间】:2015-09-26 16:03:17
【问题描述】:

您好,我正在尝试从 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 处的第一次机会异常: Microsoft C++ 异常:内存位置的 cv::Exception 0x000000000019A8A0.

如果有这个异常的处理程序,程序可能是安全的 继续。

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

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

我对 C++ 和 Visual Studios 还很陌生,如果有任何帮助,我将不胜感激。提前致谢!

【问题讨论】:

  • “按原样”为我工作。该错误应该意味着您的框架不是 RGB。
  • 对不起@Miki 我对此很陌生。如果我的框架不是 RGB,我应该如何修复它?
  • 代码工作正常(它是从 opencv 文档复制和粘贴的,对吗?),所以代码没有问题。尝试在 cvtColor 之前添加std::cout << frame.channels();std::cout << edges.channels();,它应该会打印很多 31
  • @Miki 是的,它只是复制粘贴的。我添加了您建议的代码,但它没有打印任何内容。它仍然产生相同的错误并从程序中中断。
  • 所以没有进入for循环?

标签: c++ visual-studio opencv visual-studio-2013


【解决方案1】:

从 cmets 中的对话到问题,我们看到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,我仍然会收到错误消息。
  • VideoCapture 通常在 BGR 中给出帧。这个案例不同。如果您还有其他问题,请提出新问题@CODError
猜你喜欢
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多