4.结构光:遇到的问题

来源:互联网 发布:淘宝上哪家燕窝是正品 编辑:程序博客网 时间:2024/05/30 23:52

折腾了结构光视觉已有一个月之久了,代码不易,且调且珍惜啊!遇到的主要问题如下:

1.OpenCV的速度真心慢,无论是相移还是格雷码,开源的要慎重啊!
2.立体矫正之后的图片进行三维重建,Failed!这个问题很致命,目前一直没搞懂,问题出在哪,继续摸索吧!


核心代码如下,参考OpenCV3.1的例子:

        // 初始化size_t numberOfPatternImages = graycode_Decoder->getNumberOfPatternImages();//42vector<vector<Mat>> captured_pattern;captured_pattern.resize(2);captured_pattern[0].resize(numberOfPatternImages);captured_pattern[1].resize(numberOfPatternImages); // 全白图像,白色图案编码Mat color = imread(imagelist[numberOfPatternImages], IMREAD_COLOR);Size imagesSize = color.size();// 立体校正Mat R1, R2, P1, P2, Q;Rect validRoi[2];stereoRectify(cam1intrinsics, cam1distCoeffs, cam2intrinsics, cam2distCoeffs, imagesSize, R, T, R1, R2, P1, P2, Q,0, -1, imagesSize, &validRoi[0], &validRoi[1]);Mat map1x, map1y, map2x, map2y;initUndistortRectifyMap(cam1intrinsics, cam1distCoeffs, R1, P1, imagesSize, CV_32FC1, map1x, map1y);initUndistortRectifyMap(cam2intrinsics, cam2distCoeffs, R2, P2, imagesSize, CV_32FC1, map2x, map2y);// 导入图像for (size_t i = 0; i < numberOfPatternImages; i++){// 0-41captured_pattern[0][i] = imread(imagelist[i], IMREAD_GRAYSCALE);// 44-87captured_pattern[1][i] = imread(imagelist[i + numberOfPatternImages + 2], IMREAD_GRAYSCALE);if ((!captured_pattern[0][i].data) || (!captured_pattern[1][i].data)){return;}remap(captured_pattern[1][i], captured_pattern[1][i], map1x, map1y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));remap(captured_pattern[0][i], captured_pattern[0][i], map2x, map2y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));}// 导入全白全黑背景图案vector<Mat> blackImages;vector<Mat> whiteImages;blackImages.resize(2);whiteImages.resize(2);whiteImages[0] = imread(imagelist[numberOfPatternImages], IMREAD_GRAYSCALE);//42blackImages[0] = imread(imagelist[numberOfPatternImages + 1], IMREAD_GRAYSCALE);//43whiteImages[1] = imread(imagelist[2 * numberOfPatternImages + 2], IMREAD_GRAYSCALE);//86blackImages[1] = imread(imagelist[2 * numberOfPatternImages + 2 + 1], IMREAD_GRAYSCALE);//87//INTER_NEAREST, BORDER_CONSTANT, Scalar()); remap(color, color, map2x, map2y, INTER_NEAREST, BORDER_CONSTANT, Scalar());remap(whiteImages[0], whiteImages[0], map2x, map2y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));remap(whiteImages[1], whiteImages[1], map1x, map1y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));remap(blackImages[0], blackImages[0], map2x, map2y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));remap(blackImages[1], blackImages[1], map1x, map1y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));// 解码Mat disparityMap;bool decoded = graycode_Decoder->decode(captured_pattern, disparityMap, blackImages, whiteImages, structured_light::DECODE_3D_UNDERWORLD);


0 0
原创粉丝点击