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

[OpenCV] zapisywanie mapy głębokośći do pliku

Ostatnio zmodyfikowano 2017-06-09 15:03
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
[OpenCV] zapisywanie mapy głębokośći do pliku
» 2017-06-09 14:32:34
jestem laikiem jeżeli chodzi o OpenCV, kod nie jest duży i skomplikowany, chcę zapisać mapę głębokości z 2 obrazów lewego i prawego do disparity.jpg ale brakuje konwersji :

 cannot convert argument 2 from 'cv::Mat' to 'const CvArr *'

jak to naprawić ???



aha ta druga metoda SGBM nie działa ... wie ktoś jak to naprawić ?
C/C++
#include "opencv2/core/core.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/contrib/contrib.hpp"
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace cv;
using namespace std;

int main( int argc, char * argv[] )
{
    Mat img1, img2, g1, g2;
    Mat disp, disp8;
   
    char * method = "BM";
    img1 = imread( "left1.png" );
    img2 = imread( "right1.png" );
   
    cvtColor( img1, g1, CV_BGR2GRAY );
    cvtColor( img2, g2, CV_BGR2GRAY );
   
    if( !( strcmp( method, "BM" ) ) )
    {
        StereoBM sbm;
       
        sbm.state->SADWindowSize = 19;
        sbm.state->numberOfDisparities = 112;
        sbm.state->preFilterSize = 5;
        sbm.state->preFilterCap = 61;
        sbm.state->minDisparity = - 39;
        sbm.state->textureThreshold = 507;
        sbm.state->uniquenessRatio = 0;
        sbm.state->speckleWindowSize = 0;
        sbm.state->speckleRange = 8;
        sbm.state->disp12MaxDiff = 1;
       
       
       
        sbm( g1, g2, disp );
    }
    else if( !( strcmp( method, "SGBM" ) ) )
    {
        StereoSGBM sbm;
       
        sbm.SADWindowSize = 3;
        sbm.numberOfDisparities = 144;
        sbm.preFilterCap = 63;
        sbm.minDisparity = - 39;
        sbm.uniquenessRatio = 10;
        sbm.speckleWindowSize = 100;
        sbm.speckleRange = 32;
        sbm.disp12MaxDiff = 1;
        sbm.fullDP = false;
        sbm.P1 = 216;
        sbm.P2 = 864;
        sbm( g1, g2, disp );
    }
   
   
    normalize( disp, disp8, 0, 255, CV_MINMAX, CV_8U );
   
    imshow( "left", img1 );
    imshow( "right", img2 );
    imshow( "disp", disp8 );
   
   
    Size s = disp8.size();
    int rows = s.height;
    int cols = s.width;
   
    cout << rows << " " << cols;
   
   
    cout << endl << disp8.at < char >( 1.1 );
    cvSaveImage( "disparity.jpg", tmp ); //tutaj jest błąd, proszę o poradę jak to naprawić
    waitKey( 0 );
   
    return( 0 );
   
}





P-162294
aaadam
Temat założony przez niniejszego użytkownika
» 2017-06-09 15:03:42
znalazłem w internetach odpowiedz :
C/C++
IplImage * oldstyleimg = & disp8.operator IplImage();

jeżeli chodzi o SGBM to jeszcze nie ogarniam dlaczego nie działa
P-162295
« 1 »
  Strona 1 z 1