0

我正在尝试对我的视频流使用阈值,但它不起作用。

我的视频流:

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很陌生)。

提前谢谢!

4

1 回答 1

2

您的 depthImage 是指向 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);
于 2011-11-24T14:28:42.420 回答