我试图画出"路径"视频中的几个移动物体,输出将是一个图像,具有最终状态(移动物体)和绘制路径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)