OpenCV cpp обнаружение движения

Я пытаюсь выяснить, как работает обнаружение движения в opencv.

Я вижу там ссылку на анализ видео, но я не нахожу достаточно информации о том, как это используется.

Я также видел некоторых людей, использующих absdiff, я попробовал это так, но это дает мне исключение при ошибках памяти

Ошибка OpenCV: размеры входных аргументов не совпадают (операция не является
rray op array ‘(где массивы имеют одинаковый размер и одинаковое количество каналов)
, ни ‘array op scalar’, ни ‘scalar op array’) в cv :: arithm_op, файл C: \ builds
\ 2_4_PackSlave-win32-vc12-shared \ opencv \ modules \ core \ src \ arithm.cpp, строка 1287

код

#include <iostream>
#include <sstream>
#include <string>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main()
{
//create matrix for storage
Mat image;
Mat image2;
Mat image3;
Mat image4;

//initialize capture
VideoCapture cap;
cap.open(0);

//create window to show image
namedWindow("window", 1);

while (1){

//copy webcam stream to image
cap >> image;
cap >> image2;

absdiff(image, image2, image3);
threshold(image3, image4, 128, 255, THRESH_BINARY);//print image to screen
if (!image.empty()) {

imshow("window", image3);

}

//delay33ms

waitKey(10);

//
}

}

Я, очевидно, не правильно его использую

0

Решение

Вы должны подтвердить успешность VideoCapture перед использованием изображений. Кроме того, вы хотите проверить, было ли изображение успешно захвачено перед его использованием. Попробуй это:

VideoCapture cap(0);

if(!cap.isOpened()) {
std::cerr << "Failed to open video capture" << std::endl;
return -1;
}

namedWindow("window");

while(true) {
cap >> image;
cap >> image2;

if(image.empty() || image2.empty()) {
std::cerr << "failed to capture images\n";
return -1;
}

absdiff(image, image2, image3);
threshold(image3, image4, 128, 255, THRESH_BINARY);

imshow("window", image);
int k = waitKey(30) & 0xff;
if('q' == k || 27 == k)
break;

}
1

Другие решения


По вопросам рекламы [email protected]