Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[openCV] mapa głębokości z 2 obrazów - stereowizja

Ostatnio zmodyfikowano 2017-10-22 16:17
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
[openCV] mapa głębokości z 2 obrazów - stereowizja
» 2017-10-22 16:17:48
witam, próbuję zrobić mapę głębokości z 2 plików( kod wzięty z przyklaów  które się znajdują na openCv.org) , używam kamerkę minoru3d, ustawiałem ją w różnych pozycjach ale nie działa ta mapa głębokości, ktoś coś może doradzić??

C/C++
/**
* @file SBM_Sample
* @brief Get a disparity map of two images
* @author A. Huaman
*/

#include <iostream>
#include "opencv2/calib3d.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <Windows.h>
using namespace cv;

const char * windowDisparity = "Disparity";

void readme();

/**
* @function main
* @brief Main function
*/
int main()
{
   
    readme();
    VideoCapture cap( 1 );
    Mat frame;
    cap >> frame;
    imwrite( "../x64/Debug/image.png", frame );
    cap.release();
    Sleep( 100 );
   
    VideoCapture cap2( 2 );
    Mat frame2;
    cap2 >> frame2;
    imwrite( "../x64/Debug/image2.png", frame2 );
    cap.release();
   
   
    //-- 1. Read the images
    Mat imgLeft = imread( "../x64/Debug/image.png", IMREAD_GRAYSCALE );
    Mat imgRight = imread( "../x64/Debug/image2.png", IMREAD_GRAYSCALE );
    //-- And create the image in which we will save our disparities
    Mat imgDisparity16S = Mat( imgLeft.rows, imgLeft.cols, CV_16S );
    Mat imgDisparity8U = Mat( imgLeft.rows, imgLeft.cols, CV_8UC1 );
   
    if( imgLeft.empty() || imgRight.empty() )
    {
        std::cout << " --(!) Error reading images " << std::endl; return - 1;
    }
   
    //-- 2. Call the constructor for StereoBM
    int ndisparities = 16 * 5; /**< Range of disparity */
    int SADWindowSize = 21; /**< Size of the block window. Must be odd */
   
    Ptr < StereoBM > sbm = StereoBM::create( ndisparities, SADWindowSize );
   
    //-- 3. Calculate the disparity image
    sbm->compute( imgLeft, imgRight, imgDisparity16S );
   
    //-- Check its extreme values
    double minVal; double maxVal;
   
    minMaxLoc( imgDisparity16S, & minVal, & maxVal );
   
    printf( "Min disp: %f Max value: %f \n", minVal, maxVal );
   
    //-- 4. Display it as a CV_8UC1 image
    imgDisparity16S.convertTo( imgDisparity8U, CV_8UC1, 255 /( maxVal - minVal ) );
   
    namedWindow( windowDisparity, WINDOW_NORMAL );
    imshow( windowDisparity, imgDisparity8U );
   
    //-- 5. Save the image
    //imwrite("SBM_sample.png", imgDisparity16S);
   
    waitKey( 0 );
   
    return 0;
}

/**
* @function readme
*/
void readme()
{
    std::cout << " Usage: ./SBMSample <imgLeft> <imgRight>" << std::endl;
}
P-165966
« 1 »
  Strona 1 z 1