please try the code below ( i hope it is not too cryptographic )
#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/tracking.hpp>
#include "samples_utility.hpp"
using namespace std;
using namespace cv;
void addPatch(Mat& canvas, Mat& frame, Rect rect, Size sz, int index)
{
Rect r_patch(10+(10*index)+(sz.width*index), frame.rows + 20, sz.width, sz.height);
Mat m_patch = canvas(r_patch);
resize(frame(rect), m_patch, sz);
}
int main()
{
Mat frame;
MultiTracker trackers;
String trackingAlg = "CSRT";
vector<Rect> ROIs;
vector<Rect2d> objects;
vector<Ptr<Tracker> > algorithms;
string video = "vtest.avi";
VideoCapture cap(video);
cap >> frame;
selectROIs("tracker", frame, ROIs, 0, 0);
for (size_t i = 0; i < ROIs.size(); i++)
{
algorithms.push_back(createTrackerByName(trackingAlg));
objects.push_back(ROIs[i]);
}
trackers.add(algorithms, frame, objects);
while (true)
{
cap >> frame;
Mat canvas(frame.rows + 150, frame.cols + 50, CV_8UC3, Scalar(127, 127, 127));
Rect r(10, 10, frame.cols, frame.rows);
frame.copyTo(canvas(r));
trackers.update(frame);
for (unsigned i = 0; i < trackers.getObjects().size(); i++)
{
rectangle(canvas, trackers.getObjects()[i], Scalar::all(255), 2);
}
Size sz(100, 100);
Mat rois;
vector<Rect2d> rects = trackers.getObjects();
for (unsigned i = 0; i < rects.size(); i++)
{
addPatch(canvas,frame,rects[i], sz, i);
}
imshow("Frame", frame);
imshow("Canvas", canvas);
waitKey(1);
}
destroyAllWindows();
return 0;
}
wasn't this already answered here ?
Hello Berak, yes you are right. But is it possible to associate the "tracks" window within the "canvas" window resizing the tracks automatically to fit the width of the canvas window ?
Thanks in advance for your support.
Regards,
if you post your actual code (preferably on github) i can try to help.
Hello Sturkmen, Thanks for your proposal. You can find the code here : link text Thanks for your help. Regards