[英]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探測器輸出的數據類型和尺寸,並確保我跟蹤的點數屬於同一類型。 它開玩笑了!
這是你需要知道的。
這應該工作。
我跟隨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.