Я строю проект по отслеживанию объекта с веб-камеры с помощью Tracker-API (3.3.1 OpenCV Library), но при открытии кода камеры все еще возникает ошибка. Если я запускаю только код открытия камеры, ошибки не возникает. Это мой исходный код
В моем исходном коде они используют видеофайл, но в моем я хочу отслеживать объект в режиме реального времени с веб-камеры. Что-то не так с моим кодом?
#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <opencv2\core.hpp>
#include <opencv2\highgui.hpp>
#include <opencv2\tracking\tracker.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/utility.hpp>
#include <iostream>
#include <string>
#include <math.h>
using namespace cv;
using namespace std;
// Convert to string
#define SSTR( x ) static_cast< std::ostringstream & >( \
(std::ostringstream() << std::dec << x)).str()
int main(int argc, char **argv)
{
// List of tracker types in OpenCV 3.4.1
string trackerTypes[5] = { "BOOSTING", "MIL", "KCF", "TLD", "MEDIANFLOW" };
// vector <string> trackerTypes(types, std::end(types));
// Create a tracker
string trackerType = trackerTypes[0];
Ptr<Tracker> tracker;
if (trackerType == "BOOSTING")
tracker = TrackerBoosting::create();
if (trackerType == "MIL")
tracker = TrackerMIL::create();
if (trackerType == "KCF")
tracker = TrackerKCF::create();
if (trackerType == "TLD")
tracker = TrackerTLD::create();
if (trackerType == "MEDIANFLOW")
// Read video
VideoCapture cap(0); // open the default camera
if (!cap.isOpened()) // check if we succeeded
{
cout << "Could not read video file" << endl;
return 1;
}
Mat frame;
bool ok = cap.read(frame);
Rect2d bbox(287, 23, 86, 320);
rectangle(frame, bbox, Scalar(255, 0, 0), 2, 1);
imshow("Tracking", frame);
tracker->init(frame, bbox);
while (cap.read(frame)){
double timer = (double)getTickCount();
bool ok = tracker->update(frame, bbox);
float fps = getTickFrequency() / ((double)getTickCount() - timer);
if (ok){
rectangle(frame, bbox, Scalar(255, 0, 0), 2, 1);
}
else{
putText(frame, "Tracking failure detected", Point(100, 80), FONT_HERSHEY_PLAIN, 0.75, Scalar(0, 0, 255), 2);
}
imshow("Tracking", frame);
int k = waitKey(1);
if (k == 27){
break;
}
}
}