(Адаптивное) пороговое значение в ошибке opencv (неверный аргумент (неизвестный тип массива) в cvarrToMat) - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь использовать пороговое значение для моего видеопотока, но он не работает.

Мой видео поток:

Mat *depthImage = new Mat(480, 640, CV_8UC1, Scalar::all(0));

Затем я пытаюсь сделать адаптивный порог (также не работает с обычным порогом)

for(;;){

    if( wrapper->update()){


        wrapper->getDisplayDepth(depthImage);

        cvAdaptiveThreshold(depthImage, depthImage,255,CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY,75,10);


        imshow("Depth", *depthImage);

    }

    int k = waitKey(25);
    if(k == 27 ) exit(0);
}

Я получаю эту ошибку:

Ошибка OpenCV: неверный аргумент (неизвестный тип массива) в cvarrToMat, файл /Users/olivierjanssens/source/OpenCV-2.3.1/modules/core/src/matrix.cpp, строка 646 завершить, вызвав выбрасывание исключения

Что я делаю не так, я могу получить отображение и отлично видеть поток. Но когда я добавляю это пороговое значение, я получаю ранее упомянутую ошибку. (Кстати, я новичок в opencv).

Спасибо заранее!

1 Ответ

2 голосов
/ 24 ноября 2011

Your deepImage - это указатель на cv :: Mat, что мне кажется странным ...

... но если вы используете синтаксис C ++, то вы захотите использовать C ++ версия adaptiveThreshold , который имеет дело с cv::Mat, со следующим определением:

void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue,
    int adaptiveMethod, int thresholdType, int blockSize, double C);

, которому нужно будет использовать префикс cv::, если вы еще не используете это пространство имен.

Например:

Mat *depthImage; // Obtain this using your method
Mat image = *depthImage;  // Obtain a regular Mat to use (doesn't copy data, just headers)

adaptiveThreshold(image, image,255,CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY,75,10);

imshow("Depth Image", *depthImage);
// OR
imshow("Depth Image", image);
...