Я новичок в Visual Studio. Я все время получаю сообщение об ошибке: Нечеткое исключение произошло в [некоторой ячейке памяти] в Project1.exe. Место памяти постоянно меняется каждый раз, когда я нажимаю debug. Я пробовал очень простые коды, но все равно продолжаю получать эту ошибку.
Окно, которое открывается при отладке, также дает ошибку:
Ошибка OpenCV: утверждение не выполнено (scn == 3 || scn == 4) в неизвестной функции, файл.. \..\..\src\opencv\modules\imgproc\src\color.cpp, строка 3042
Код, который я запускаю:
#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;
}
Вам нужно проверить, что frame
действителен, т. !frame.empty()
или вместо for(;;)
использовать while(cap >> frame)
.
Когда захват достигает конца файла, вы получаете пустой фрейм, из-за которого cvtColor()
терпит неудачу с этой ошибкой.