【发布时间】:2017-04-27 16:46:52
【问题描述】:
我正在使用汽车级联来检测示例视频中的所有汽车。该程序目前正在它检测到的每辆汽车周围绘制矩形。但是,矩形在帧与帧之间不断变化。如果下一帧的新矩形与前一个矩形重叠,我想通过保留原始矩形来增加一些稳定性。为了实现这一点,我保存了前一帧(并从前一帧检测汽车)并将前一帧的矩形与当前帧进行比较。
Mat frame;
Mat prevFrame;
while (capture.isOpened()) {
capture.read(frame);
vector<Rect> cars; // center of rectangles where each rectangle contains the detected object
vector<Rect> prevCars; // to store previous tracked rectangles
// Detects objects of different sizes in the input image. The detected objects are returned as a list of rectangles.
car_cascade.detectMultiScale(frame, cars, 1.1, 2);
if(!prevFrame.empty()) {
car_cascade.detectMultiScale(prevFrame, prevCars, 1.1, 2);
} else {
cout << "EMPTY" << endl; // for testing
}
cout << "current : " << cars.size() << endl; // print out number of cars
cout << "previous: " << prevCars.size() << endl; // print out number of cars
// more code goes here which I haven't written here
frame.copyTo(prevFrame); // set previous frame to current frame
imshow("Video", frame);
char key = waitKey(33);
if (key == 'q')
{
break;
}
}
但是,从前一帧检测到的汽车数量与前一帧不同。例如,
空 当前:3 上一个:0
【问题讨论】:
-
为什么汽车和 prevCars 都需要 vector
????,一个就可以了..... -
我有两个,因为我将使用 for 循环遍历保存在汽车中的所有汽车,并将其与 prevCars 中的汽车进行比较,以检查两个矩形是否有边界