pull/3471/head
kallaballa 3 years ago
parent fb2e7678d4
commit 62bc9db5f1
  1. 20
      src/optflow/optflow-demo.cpp

@ -78,9 +78,9 @@ int main(int argc, char **argv) {
cv::UMat frameBuffer, videoFrame, resized, down, background, foreground(frameBufferSize, CV_8UC4, cv::Scalar::all(0));
cv::UMat backgroundGrey, downPrevGrey, downNextGrey, downMaskGrey;
vector<cv::Point2f> downNewPoints, downPrevPoints, downNextPoints, downHull;
vector<cv::Point2f> downFeaturePoints, downNewPoints, downPrevPoints, downNextPoints, downHull;
vector<cv::Point2f> upPrevPoints, upNextPoints;
vector<cv::KeyPoint> downPrevKeyPoints, keypoints;
vector<cv::KeyPoint> keypoints;
std::vector<uchar> status;
std::vector<float> err;
@ -115,21 +115,21 @@ int main(int argc, char **argv) {
cv::morphologyEx(downMaskGrey, downMaskGrey, cv::MORPH_OPEN, element, cv::Point(element.cols >> 1, element.rows >> 1), 2, cv::BORDER_CONSTANT, cv::morphologyDefaultBorderValue());
detector->detect(downMaskGrey, keypoints);
downPrevKeyPoints.clear();
downFeaturePoints.clear();
for (const auto &kp : keypoints) {
downPrevKeyPoints.push_back(kp.pt);
downFeaturePoints.push_back(kp.pt);
}
if (downPrevKeyPoints.size() > 4) {
cv::convexHull(downPrevKeyPoints, downHull);
if (downFeaturePoints.size() > 4) {
cv::convexHull(downFeaturePoints, downHull);
float area = cv::contourArea(downHull);
float density = (downPrevKeyPoints.size() / area);
float density = (downFeaturePoints.size() / area);
float stroke = 30.0 * sqrt(area / (SCALED_WIDTH * SCALED_HEIGHT * 4));
current_max_points = density * 500000.0;
size_t copyn = std::min(downPrevKeyPoints.size(), (size_t(std::ceil(current_max_points)) - downPrevPoints.size()));
size_t copyn = std::min(downFeaturePoints.size(), (size_t(std::ceil(current_max_points)) - downPrevPoints.size()));
if (downPrevPoints.size() < current_max_points) {
std::copy(downPrevKeyPoints.begin(), downPrevKeyPoints.begin() + copyn, std::back_inserter(downPrevPoints));
std::copy(downFeaturePoints.begin(), downFeaturePoints.begin() + copyn, std::back_inserter(downPrevPoints));
}
if (downPrevGrey.empty()) {
@ -153,9 +153,9 @@ int main(int argc, char **argv) {
using kb::nvg::vg;
nvgBeginPath(vg);
nvgStrokeWidth(vg, stroke);
nvgStrokeColor(vg, nvgHSLA(0.1, 1, 0.55, 16));
for (size_t i = 0; i < downPrevPoints.size(); i++) {
nvgStrokeColor(vg, nvgHSLA(0.1, 1, 0.55, 16));
if (status[i] == 1 && err[i] < (1.0 / density)
&& upNextPoints[i].y >= 0 && upNextPoints[i].x >= 0
&& upNextPoints[i].y < HEIGHT && upNextPoints[i].x < WIDTH

Loading…
Cancel
Save