我試圖使用cv::calcOpticalFlowPyrLK
但有時該函數內部斷言失敗。斷言是npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0
。我正在使用OpenCV 2.3.1。該函數的源代碼可用於here。cv :: goodFeaturesToTrack不返回任何功能
很難將我的頭圍繞在他們的代碼上,尤其是因爲我對計算機圖形學的經驗有限,而且他們缺乏評論。爲什麼這個斷言被觸發,對我的問題有什麼看法?
編輯:我所說的功能如下:
cv::calcOpticalFlowPyrLK(curBwFrame, prvFrame, features, newFeatures, trackingStatus, errors);
我發現上述features
矢量,這是通過調用cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
與顯示爲足夠大和一個非空掩模得到有效的圖像,不包含任何功能。這怎麼會發生?
curBwFrame
skinMask
我可以使用下面的代碼片段重現該問題:
#include <vector>
#include <cassert>
#include <opencv2\opencv.hpp>
using std::vector;
using namespace cv;
int main() {
vector<Point2f> features;
cv::Mat curBwFrame = imread("curBwFrame.png");
cv::cvtColor(curBwFrame, curBwFrame, CV_RGB2GRAY);
imwrite("test.png", curBwFrame);
cv::Mat skinMask = imread("skinMask.png");
cv::cvtColor(skinMask, skinMask, CV_RGB2GRAY);
imwrite("test.png", skinMask);
cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
assert(features.size() > 0);
return 0;
}
的斷言的檢查,當斷言將顯示輸入參數是點的向量。沒有你的代碼很難回答你的問題。 –
我已經在上面添加了更多信息,但我不確定其他信息可能是相關的。我可以在這裏轉儲一些大的代碼片段,但他們可能會包含大量不相關的信息。 – Pieter
對不起,我早些時候混合了一些函數調用。我在上面添加了正確的代碼片段!如果有必要,我也可以發佈「goodFeaturesToTrack」的面具和源圖片。 – Pieter