【发布时间】:2017-02-11 12:56:40
【问题描述】:
我已经使用cv::calcOpticalFlowFarneback 在 openFrameworks 中使用 ofxOpenCv 计算当前和前一帧视频中的光流。
然后我在顶部绘制带有光流场的视频,然后在高于特定阈值的区域绘制显示运动流的矢量。
我现在要做的是创建这些运动区域的边界框并获取质心并将 x,y 位置存储在变量中以进行跟踪。
如果有帮助,这就是我绘制流场的方式。
if (calculatedFlow){
ofSetColor( 255, 255, 255 );
video.draw( 0, 0);
int w = gray1.width;
int h = gray1.height;
//1. Input images + optical flow
ofPushMatrix();
ofScale( 4, 4 );
//Optical flow
float *flowXPixels = flowX.getPixelsAsFloats();
float *flowYPixels = flowY.getPixelsAsFloats();
ofSetColor( 0, 0, 255 );
for (int y=0; y<h; y+=5) {
for (int x=0; x<w; x+=5) {
float fx = flowXPixels[ x + w * y ];
float fy = flowYPixels[ x + w * y ];
//Draw only long vectors
if ( fabs( fx ) + fabs( fy ) > .5 ) {
ofDrawRectangle( x-0.5, y-0.5, 1, 1 );
ofDrawLine( x, y, x + fx, y + fy );
}
}
}
}
【问题讨论】:
标签: c++ opencv openframeworks opticalflow