OpenCV 3.0 RGBD DepthCleaner

☆樱花仙子☆ 提交于 2019-12-11 16:25:38

问题


I am having some difficulties to use the function DepthCleaner () with method = DEPTH_CLEANER_NIL to clean a depth image. This function is released in OpenCV 3.0.0. So, it's too early to find useful documentation for this function. If anyone of you have already used this function, could you please inform me which set of functions and codes I use to get a clean depth image. Let's say, I have a depth image from Kinect1 named as 'Img1.png'. I am declaring the image and using DepthCleaner as follows:

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

I am using C++. But, I am not having correct result. I guess I am doing something wrong in the codes. I have also tried using this set of codes:

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

But, it did not help me either; getting compiler error for this line in the above piece of code:

depthc->operator ()(point3DMat,output);). 

It would be a great help if you can point me to the right direction.


回答1:


OpenCV Error: Assertion failed (depth.type() == (((6) & ((1 << 3) - 1)) + (((1)-1) << 3)) || depth.type() == (((5) & ((1 << 3) - 1)) + (((1)-1) << 3)) || depth.type() == (((2) & ((1 << 3) - 1)) + (((1)-1) << 3)) || depth.type() == (((3) & ((1 << 3) - 1)) + (((1)-1) << 3))) in depthTo3d, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/opencv_contrib/rgbd/src/depth_to_3d.cpp, line 232

terminate called after throwing an instance of 'cv::Exception'

   what():  /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/opencv_contrib/rgbd/src/depth_to_3d.cpp:232: error: (-215) depth.type() == (((6) & ((1 << 3) - 1)) + (((1)-1) << 3)) || depth.type() == (((5) & ((1 << 3) - 1)) + (((1)-1) << 3)) || depth.type() == (((2) & ((1 << 3) - 1)) + (((1)-1) << 3)) || depth.type() == (((3) & ((1 << 3) - 1)) + (((1)-1) << 3)) in function depthTo3d

I found the question about it . what?



来源:https://stackoverflow.com/questions/31335524/opencv-3-0-rgbd-depthcleaner

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!