我从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流式传输。