cv::goodFeaturesToTrack не возвращает никаких функций

Я пытаюсь использоватьcv::calcOpticalFlowPyrLK , но иногда внутреннее утверждение в этой функции терпит неудачу. Утверждение npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0. Я использую OpenCV 2.3.1. Исходный код этой функции доступен здесь.

Мне трудно понять их код, особенно из-за моего ограниченного опыта работы с компьютерной графикой и отсутствия комментариев. Почему это утверждение срабатывает и что оно говорит о моей проблеме?

Правка: Я вызываю функцию следующим образом:

cv::calcOpticalFlowPyrLK(curBwFrame, prvFrame, features, newFeatures, trackingStatus, errors);

Я обнаружил, что вектор признаков, который был получен вызовом cv::goodFeaturesToTrack(curBwFrame, features, 5 , 0.2, 0.5, skinMask);с непустой маской, которая кажется достаточно большой и допустимым изображением, не содержит никаких признаков. Как это может произойти?

curBwFrame

curBwFrame

skinMask

skinMask

Я могу воспроизвести проблему, используя следующий фрагмент кода:

#include 
#include 
#include 
using std::vector;
using namespace cv;

int main() {
    vector 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;
}

5
задан Rui Marques 15 February 2013 в 14:59
поделиться