C++ 使用Open CV时Visual Studio中未处理的异常

C++ 使用Open CV时Visual Studio中未处理的异常,c++,opencv,visual-studio-2012,unhandled-exception,C++,Opencv,Visual Studio 2012,Unhandled Exception,我是Visual Studio的新手。我一直收到一个错误:Project1.exe中的[some memory location]发生未处理的异常 每次我点击debug时,内存位置都会不断变化。我尝试过非常简单的代码,但仍然不断出现这种错误 调试时打开的窗口也会显示错误: OpenCV错误:在未知函数中,文件..\\..\src\OpenCV\modules\imgproc\src\color.cpp的第3042行,断言失败(scn==3 | | scn==4) 我正在运行的代码是: #

我是Visual Studio的新手。我一直收到一个错误:Project1.exe中的[some memory location]发生未处理的异常 每次我点击debug时,内存位置都会不断变化。我尝试过非常简单的代码,但仍然不断出现这种错误

调试时打开的窗口也会显示错误:

OpenCV错误:在未知函数中,文件..\\..\src\OpenCV\modules\imgproc\src\color.cpp的第3042行,断言失败(scn==3 | | scn==4)

我正在运行的代码是:

    #include <stdio.h>
    #include <iostream>
    #include <vector>
    #include "opencv2/core/core.hpp"
    #include "opencv2/features2d/features2d.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/calib3d/calib3d.hpp"
    #include "opencv2/video/video.hpp"
    #include "opencv2/opencv.hpp"
    using namespace cv;
    using namespace std;

    int main (int argc, char *argv[])
    {
      cv::Mat frame;
      cv::Mat back;
      cv::Mat fore;
      cv::Mat edges;
      VideoCapture cap (0);
      BackgroundSubtractorMOG2 bg;
      bg.set ("nmixtures", 3);
      bg.set ("detectShadows", false);
      std::vector < std::vector < cv::Point > >contours;

      cv::namedWindow ("Frame");
      cv::namedWindow ("Background");

      for (;;)
        {
          cap >> frame;
          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;

        }
        return 0;
    }
#包括
#包括
#包括
#包括“opencv2/core/core.hpp”
#包括“opencv2/features2d/features2d.hpp”
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/calib3d/calib3d.hpp”
#包括“opencv2/video/video.hpp”
#包括“opencv2/opencv.hpp”
使用名称空间cv;
使用名称空间std;
int main(int argc,char*argv[])
{
cv::垫架;
cv::垫背;
cv::Mat-fore;
cv::垫边;
视频捕获上限(0);
背景:mog2-bg;
bg.set(“nmixtures”,3);
bg.set(“检测阴影”,假);
标准::矢量<标准::矢量>等高线;
cv::namedWindow(“框架”);
简历::namedWindow(“背景”);
对于(;;)
{
cap>>框架;
CVT颜色(边框、边缘、CV_bgr2灰色);
高斯模糊(边,边,大小(7,7),1.5,1.5);
Canny(边,边,0,30,3);
imshow(“边”,边);
如果(等待键(30)>=0)中断;
}
返回0;
}

您需要检查
帧是否有效,即
!frame.empty()

当捕获到达文件末尾时,您将获得一个空帧,这将导致
cvtColor()
失败并出现该错误。

此断言失败表示某些函数的输入映像没有3或4个通道。你发布的代码对我来说没有错误。所以这不是全部代码对吗?