【发布时间】:2013-04-28 12:03:37
【问题描述】:
我编写了一个程序,它使用 goodFeaturesToTrack 和 calcOpticalFlowPyrLK 逐帧跟踪特征。该程序可靠地工作,并且可以从前一帧估计 Android 相机上的预览图像中的光流。下面是一些描述一般过程的sn-ps:
goodFeaturesToTrack(grayFrame, corners, MAX_CORNERS, quality_level,
min_distance, cv::noArray(), eig_block_size, use_harris, 0.06);
...
if (first_time == true) {
first_time = false;
old_corners = corners;
safe_corners = corners;
mLastImage = grayFrame;
} else {
if (old_corners.size() > 0 && corners.size() > 0) {
safe_corners = corners;
calcOpticalFlowPyrLK(mLastImage, grayFrame, old_corners, corners,
status, error, Size(21, 21), 5,
TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30,
0.01));
} else {
//no features found, so let's start over.
first_time = true;
}
}
上面的代码在一个循环中一遍又一遍地运行,每次迭代都会抓取一个新的预览帧。 Safe_corners、old_corners 和corners 都是类vector 的数组。上面的代码效果很好。
现在,对于我确定的每个功能,我希望能够分配有关该功能的一些信息...找到的次数,也许是该功能的描述符,谁知道...我的第一个这样做的方法是:
class Feature: public Point2f {
private:
//things about a feature that I want to track
public:
//getters and fetchers and of course:
Feature() {
Point2f();
}
Feature(float a, float b) {
Point2f(a,b);
}
}
接下来,我所有的 outputArrays 都从向量
这是我收到的错误消息。
OpenCV 错误:void cv::Mat::convertTo(cv::OutputArray, int, double, double) const, 文件 /home/reports/ci/slave50-SDK/opencv 中的断言失败 (func != 0) /modules/core/src/convert.cpp,第 1095 行
那么,我对论坛的问题是,OpenCV 函数真的需要 Point2f 向量还是 Point2f 的后代类也能正常工作?下一步是让 gdb 在 Android 手机上使用移动代码并更准确地查看崩溃的位置,但是如果我的方法存在根本缺陷,我不想走这条路。
或者,如果使用上述方法跨多个帧跟踪特征,每个点在内存中的地址是否会改变?
提前致谢。
【问题讨论】: