Mat i1 = imread("1.jpg", 0); //read as a gray scale image
Mat i2 = imread("2.jpg", 0); //reas as a gray scale image
Mat flowMat;
vector <Point2f> i1_corner, i2_corner;
vector <uchar> status;
vector <float> err;
goodFeaturesToTrack(i1, i1_corner, 1000, 0.01, 30);
calcOpticalFlowPyrLK(i1, i2, i1_corner, i2_corner, status, err);
我想跟踪 i2 图片中的 i1_corner 功能点
在上面的代码中我使用迭代的Lucas-Kanade方法跟踪它们
calcOpticalFlowPyrLK(i1, i2, i1_corner, i2_corner, status, err);
但是我可以使用DIS光流跟踪它们,这在opencv的以下函数中实现
createOptFlow_DIS(DISOpticalFlow::PRESET_ULTRAFAST)->calc(i1, i2, flowMat);
上述函数为图像 i1
中的每个像素找到密集的光流答案 0 :(得分:0)
简单地在流场中添加相应位置的光流(位移)矢量:
sqlitebrowser
请注意,最后一行读取像素位置处的流量,即i1_corner位置是四舍五入的。要获得子像素级别的流量值,您需要在那里执行插值。但是,由于特别是DIS流程计算非常模糊(粗糙)的流场,插值不会显着改变跟踪。