簡體   English   中英

OpenCV 光流斷言

[英]OpenCV Optical Flow assertion

我正在嘗試沿着通過 dsift 使用 python 2.7 和 openCV 2.4.11 獲得的面部特征的輪廓跟蹤地標。 我想在幀之間跟蹤這些功能。

但是我收到以下錯誤。 我已經檢查過輸入圖像是 1 通道等維(和無符號 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應該是單精度浮點數,意思是float32。 這種類型可以使用numpy。 python中的float是float64
  • 坐標參數i_old_pts(來自你的程序)應該是一個numpy數組,其維度為(n,1,2),其中n代表點數。

這應該工作。

我跟隨opencv樣本的光流有同樣的問題。 在我的情況下,問題是我正在閱讀的視頻文件的類型。 我是從mkv文件中讀取的,但是沒有用。

我不知道為什么,但是經過大量的代碼評估和調試,我發現我的視頻的第一幀(我從網絡攝像頭捕獲的視頻)是一個空的黑色圖像。 所以,我使用了第二幀:

ret, prevframe = cap.read();
ret, prevframe = cap.read(); # the first frame was black and I was not sure why!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM