python - OpenCV 光流断言

标签 python opencv video-tracking

我正在尝试沿着通过 dsift 使用 python 2.7 和 openCV 2.4.11 获得的面部特征轮廓跟踪地标。我想在帧之间跟踪这些特征。

但是我收到以下错误。我已经检查了输入图像是 1 channel 相等尺寸(和无符号 8 位类型),并且同样具有 prev 点:

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, tru
e)) >= 0) in cv::calcOpticalFlowPyrLK, file ..\..\..\modules\video\src\lkpyramid.cpp
cv2.error: ..\..\..\modules\video\src\lkpyramid.cpp:845: error: (-215) (npoints
= prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function cv::calcOpticalFlowP
yrLK

导致问题的行:

new_pts, ttl, err = cv2.calcOpticalFlowPyrLK(self.old_img, i_img, i_old_pts, None)

有人知道我可以从哪里开始调试吗?

最佳答案

我在做基于光流的跟踪时遇到了同样的问题。我尝试了许多不同的方法来解决这个问题。但徒劳无功。

最后,有一个示例程序,其中他们使用 shi-tomsi 角点检测进行跟踪,这些点用于 LK 算法并且运行良好。所以我研究了 Shi-Tomsi 检测器输出的数据类型和维度,并确保我要跟踪的点属于同一类型。它醒了!

这是您需要知道的。

  • 确保图像是灰度的。
  • 您的坐标参数 i_old_pts 应该是单精度 float ,即 float32。这种类型在 numpy 中可用。 python中的float是float64
  • 坐标参数 i_old_pts(来自您的程序)应该是维度为 (n,1,2) 的 numpy 数组,其中 n 表示点数。

这应该有效。

关于python - OpenCV 光流断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540181/

相关文章:

python - Slack API - 来自自定义机器人帖子的附件作为纯文本

python - anaconda 中的 pygame 无法安装

python - 我的模型具有较高的准确度和 val_accuracy,但在测试数据上给出错误的结果

c++ - 绘制opencv?

java - 使用 BoofCV 跟踪快速移动的基准点

python - 如何删除列表或字符串中的连续值

python - 使用 PostgreSQL 时使用 COPY 命令处理错误

c++ - OpenCV:从 std::in 读取图像?

opencv - 人员检测和跟踪