【发布时间】:2014-04-01 02:57:28
【问题描述】:
我之前已经实现了密集光流来计算 c++ 中每个像素的速度。这个例子对我有很大帮助(https://github.com/Itseez/opencv/blob/master/samples/cpp/tvl1_optical_flow.cpp)。现在我想将我的代码转换为 java,但我找不到 createOptFlow_DualTVL1() 的等效 JavaCV 函数。有人可以帮我吗?如果有例子就好了。
我在 C++ 中使用 OpenCV 的代码是这样的:
Mat New_Previous_Gray (holds the previous image)
Mat New_Current_Gray (holds the current image)
Mat_<Point2f> Optical_Flow;
Ptr<DenseOpticalFlow> tvl1 = createOptFlow_DualTVL1(); //This two lines is the want i want to change to JavaCV
tvl1->calc(New_Previous_Gray, New_Current_Gray, Optical_Flow); //This two lines is the want i want to change to JavaCV
double Pxl_Distance[Optical_Flow.rows][Optical_Flow.rows]; //will hold the velocity for every pixel
for(int y = 0; y < Optical_Flow.cols; y++)
{
for(int x = 0; x < Optical_Flow.rows; x++)
{
const Point2f& flow_xy = Optical_Flow.at<Point2f>(x, y);
int Vel_x = flow_xy.x;
int Vel_y = flow_xy.y;
Pxl_Distance = sqrt(double(((abs(Vel_x) * abs(Vel_x)) + (abs(Vel_y) * abs(Vel_y)))));
Pxl_Distance[x][y] = Pxl_Distance;
}
}
提前致谢
到目前为止,我一直在研究以下是我想出的用于计算光流的代码,谁能告诉我我做得对
IplImage pFrameGray = cvCreateImage(cvGetSize(pFront),IPL_DEPTH_8U,1);
IplImage cFrameGray = cvCreateImage(cvGetSize(pFront),IPL_DEPTH_8U,1);
cvConvertImage(pFront, pFrameGray, CV_CVTIMG_FLIP);
cvConvertImage(cFront, cFrameGray, CV_CVTIMG_FLIP);
IplImage Optical_Flow = cvCreateImage( cvSize(pFrameGray.width(),pFrameGray.height()), IPL_DEPTH_32F, 2 );
DenseOpticalFlow tvl1 = createOptFlow_DualTVL1();
tvl1.calc(pFrameGray, cFrameGray, Optical_Flow);
如果这是正确的,我如何从 Optical_Flow(IplImage) 获取光学值。
谢谢
【问题讨论】:
标签: c++ opencv javacv opticalflow