将 OpenCV 阈值与 Kinect 图像结合使用

Posted

技术标签:

【中文标题】将 OpenCV 阈值与 Kinect 图像结合使用【英文标题】:Use OpenCV Threshold with Kinect Image 【发布时间】:2012-02-27 18:40:50 【问题描述】:

我正在尝试将 OpenCV 阈值与 OpenCV VideoCapture 模块检索到的 depthImage 一起使用,但出现以下错误:

OpenCV 错误:未知函数中的参数错误, 文件 PATHTOOPENCV\opencv\modules\core\src\matrix.cpp 第 646 行

我的代码如下:

#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;
    

非常感谢您的帮助

【问题讨论】:

【参考方案1】:

首先,您将 C 接口与 C++ 接口混合在一起,它们不应该混合在一起!

cv::Mat 属于 C++ 接口,cvThreshold() 属于 C。您应该改用cv::threshold()

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

参数:

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)

【讨论】:

以上是关于将 OpenCV 阈值与 Kinect 图像结合使用的主要内容,如果未能解决你的问题,请参考以下文章

otsu结合OpenCV实现灰度图像自动阈值处理

Opencv中的阈值函数

opencv 5 -- 图像阈值

Java opencv inRange 阈值函数使我的图像变成三个不同的图像?

OpenCV OpenNI 校准 kinect

OpenCV计算机视觉 —— 图像的阈值处理与自适应阈值Otsu