Use OpenCV Threshold with Kinect Image
Asked Answered
C

1

2

I'm trying to use the OpenCV Threshold with the depthImage retrieved by the OpenCV VideoCapture module, but I get the following error:

OpenCV Error: Bad argument in unknown function, file PATHTOOPENCV\opencv\modules\core\src\matrix.cpp line 646

My code is as follows:

#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/gpu/gpu.hpp"

cv::VideoCapture kinect;
cv::Mat rgbMap;
cv::Mat dispMap;
bool newFrame;

void setup()
{
    kinect.open(CV_CAP_OPENNI);
    newFrame = false;
}

void update()
{
    if(kinect.grab())
    {
        kinect.retrieve( rgbMap, CV_CAP_OPENNI_BGR_IMAGE);
        kinect.retrieve( dispMap, CV_CAP_OPENNI_DISPARITY_MAP );
        newFrame = true;
    }
}

void draw()
{
    if(newFrame)
    {
        cv::Mat * _thresSrc = new cv::Mat(dispMap);
        cv::Mat * _thresDst = new cv::Mat(dispMap);

        cvThreshold(_thresSrc, _thresDst, 24, 255, CV_THRESH_BINARY);

        // Draw _thresDst;

        delete _thresSrc;
        delete _thresDst;
        newFrame = false;
    }
}

Thank you very much for your help

Consecrate answered 27/2, 2012 at 18:40 Comment(0)
C
3

To start things off, you are mixing the C interface with the C++ interface, and they shouldn't be mixed together!

cv::Mat belongs to the C++ interface, and cvThreshold() belongs to the C. You should use cv::threshold() instead:

double cv::threshold(const Mat& src, Mat& dst, double thresh, double maxVal, int thresholdType)

Parameters:

src – Source array (single-channel, 8-bit of 32-bit floating point)
dst – Destination array; will have the same size and the same type as src
thresh – Threshold value
maxVal – Maximum value to use with THRESH_BINARY and THRESH_BINARY_INV thresholding types
thresholdType – Thresholding type (see the discussion)
Coronagraph answered 27/2, 2012 at 20:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.