我在使用带有 method = DEPTH_CLEANER_NIL 的函数 DepthCleaner () 来清理深度图像时遇到了一些困难。此功能在 OpenCV 3.0.0 中发布。因此,现在为这个函数找到有用的文档还为时过早。如果你们中的任何人已经使用过此功能,请告诉我我使用哪组功能和代码来获得干净的深度图像。假设我有一张来自 Kinect1 的深度图像,名为“Img1.png”。我正在声明图像并使用 DepthCleaner,如下所示:
char fileName[64];
Mat depth_image = Mat(480, 640, CV_16UC1);
Mat output = Mat(480, 640, CV_16U);
snprintf(fileName, sizeof(fileName), "Depth_Image/Img1.png");
depth_image = imread(fileName, -1);
namedWindow("Input image",WINDOW_AUTOSIZE);
imshow ("Input image",depth_image);
DepthCleaner* depthc = new DepthCleaner(CV_16U, 3, DepthCleaner::DEPTH_CLEANER_NIL);
depthc->operator ()(depth_image,output);
namedWindow("depthCleaner",WINDOW_AUTOSIZE);
imshow ("depthCleaner",output);
我正在使用 C++。但是,我没有正确的结果。我想我在代码中做错了什么。我也尝试过使用这组代码:
char fileName[64];
Mat depth_image = Mat(480, 640, CV_16UC1);
Mat output = Mat(480, 640, CV_16U);
float fx = 525.0f, // default
fy = 525.0f,
cx = 319.5f,
cy = 239.5f;
Mat cameraMatrix = Mat::eye(3,3,CV_32FC1);
{
cameraMatrix.at<float>(0,0) = fx;
cameraMatrix.at<float>(1,1) = fy;
cameraMatrix.at<float>(0,2) = cx;
cameraMatrix.at<float>(1,2) = cy;
}
snprintf(fileName, sizeof(fileName), "Depth_Image/Img1.png");
depth_image = imread(fileName, -1);
namedWindow("Input image",WINDOW_AUTOSIZE);
imshow ("Input image",depth_image);
Mat point3DMat;
depthTo3d(depth_image, cameraMatrix, point3DMat);
DepthCleaner* depthc = new DepthCleaner(CV_16U, 3, DepthCleaner::DEPTH_CLEANER_NIL);
depthc->operator ()(point3DMat,output);
namedWindow("depthCleaner",WINDOW_AUTOSIZE);
imshow ("depthCleaner",output);
但是,它也没有帮助我;在上面的代码中获取此行的编译器错误:
depthc->operator ()(point3DMat,output);).
如果您能指出我正确的方向,那将是一个很大的帮助。