如何在Kinect上实现双边滤波器?

时间:2015-03-07 10:46:23

标签: c++ opencv kinect

我从Visual Studio 2013的Kinect SDK示例KinectBridgeWithOpenCVBasics-D2D中的示例开始。

在允许用户在Kinect的Color和Depth流上选择不同种类的OpenCV过滤的程序中,使用switch语句实现选择。由于我想在程序中添加双边过滤,我尝试添加如下的switch语句:

case IDM_COLOR_FILTER_CANNYEDGE:
    {
        const double minThreshold = 30.0;
        const double maxThreshold = 50.0;

        // Convert image to grayscale for edge detection
        cvtColor(*pImg, *pImg, CV_RGBA2GRAY);
        // Remove noise
        blur(*pImg, *pImg, Size(3,3));
        // Find edges in image
        Canny(*pImg, *pImg, minThreshold, maxThreshold);
        // Convert back to color for output
        cvtColor(*pImg, *pImg, CV_GRAY2RGBA);
    }
    break;
case IDM_COLOR_FILTER_BILATERAL:
    {
        // Apply Bilateral Filter
        Mat dest;
        bilateralFilter(*pImg, dest, 5, 80, 80);
    }
    break;

它不起作用。抛出异常并显示输出

First-chance exception at 0x770BC42D in KinectVision.exe: Microsoft C++ exception: cv::Exception at memory location 0x0A49E4E4.
Unhandled exception at 0x770BC42D in KinectVision.exe: Microsoft C++ exception: cv::Exception at memory location 0x0A49E4E4.

有人能够指出我哪里出错吗?

---已于2015年3月8日添加

我以前做过一个程序来对单个图像进行双边滤镜。这有效,代码如下。

Mat image;
Mat dest;
image = imread(argv[1], CV_LOAD_IMAGE_COLOR);
bilateralFilter(image, dest, 5, 50, 3);

此程序与Kinect之间的区别在于单张图像与30fps流式传输。

0 个答案:

没有答案