OpenCV C ++中的Lucas-Kanade光流:从Python翻译代码

时间:2018-05-09 21:08:22

标签: python c++ opencv

我试图画出"路径"视频中的几个移动物体,输出将是一个图像,具有最终状态(移动物体)和绘制路径I found a code doing this in Python(参见" Lucas-Kanade光流在OpenCV& #34;部分),我试图将其翻译成C ++,问题是我是OpenCv和Python的新手,我已经成功翻译了第一部分,但没有画线,这就是我所做的:

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>

using namespace cv;
using namespace std;

/**
* @function main
*/
int main(int argc, char** argv)
{
    //TODO
    VideoCapture src = VideoCapture("C:\\Users\\youss\\Desktop\\opencv\\movingCars.mp4");
    Mat currentFrame, oldGrayedFrame, grayedFrame, mask ;
    vector<Point2f> prevPts, nextPts;
    vector<uchar> status;
    vector<float> err;
    vector<Point2f> corners;
    Mat good_new = Mat(), good_old = Mat();
    int maxCorners = 100,
        minDistance = 7,
        blockSize = 7;
    double qualityLevel = 0.3;
    src.read(currentFrame);
    cvtColor(currentFrame, oldGrayedFrame, COLOR_BGR2GRAY);

    goodFeaturesToTrack(oldGrayedFrame, corners, maxCorners, qualityLevel, minDistance, Mat(), blockSize);

    mask = Mat::zeros(currentFrame.size(), currentFrame.type());
    prevPts = corners;
    //while (true) {
        src.read(currentFrame);
        cvtColor(currentFrame, grayedFrame, COLOR_BGR2GRAY);
        calcOpticalFlowPyrLK(oldGrayedFrame, grayedFrame, prevPts, nextPts, status, err);
        int i, k;
        for (i = k = 0; i < nextPts.size(); i++) {
            if (!status[i]) continue;
            prevPts[k] = prevPts[i];
            nextPts[k] = nextPts[i];
            err[k] = err[i];
            k++;
        }
        prevPts.resize(k);
        nextPts.resize(k);
        err.resize(k);
    //}
}

我不是在寻找有人为我做这项工作,但我会很感激有关如何翻译其余部分的任何解释/提示:

# draw the tracks
    for i,(new,old) in enumerate(zip(good_new,good_old)):
        a,b = new.ravel()
        c,d = old.ravel()
        mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
        frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1)
    img = cv2.add(frame,mask)

0 个答案:

没有答案