From b13c08ef9b2800851091c2e13440c12e485c430b Mon Sep 17 00:00:00 2001 From: Joao Carreira Date: Tue, 14 Jul 2015 00:15:45 +0100 Subject: [PATCH] Do not add DisparityStereoVar module and fix DisparityStereoBM to be compatible with opencv 3.x --- modules/CMakeLists.txt | 2 +- modules/DisparityStereoBM.cpp | 43 ++++++++++++++++++++++--------- modules/DisparityStereoBM.h | 6 +++++ modules/PlaYUVerModuleFactory.cpp | 2 +- 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index ac7afdd..8f02caa 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -44,7 +44,7 @@ ADD_MODULE( FrameCrop "FrameCrop" ) ADD_MODULE( LumaAverage "LumaAverage" ) IF( USE_OPENCV ) ADD_MODULE( DisparityStereoBM "DisparityStereoBM" ) - ADD_MODULE( DisparityStereoVar "DisparityStereoVar" ) + #ADD_MODULE( DisparityStereoVar "DisparityStereoVar" ) ENDIF() diff --git a/modules/DisparityStereoBM.cpp b/modules/DisparityStereoBM.cpp index e950391..5aeb702 100644 --- a/modules/DisparityStereoBM.cpp +++ b/modules/DisparityStereoBM.cpp @@ -41,10 +41,22 @@ DisparityStereoBM::DisparityStereoBM() m_uiModuleRequirements = MODULE_REQUIRES_SKIP_WHILE_PLAY | MODULE_REQUIRES_NEW_WINDOW | MODULE_REQUIRES_OPTIONS; m_cModuleOptions.addOptions()/**/ - ( "block_size", m_cStereoBM.state->SADWindowSize, "Block Size (positive odd number) [9]" ); + ( "block_size", m_uiBlockSize, "Block Size (positive odd number) [9]" ); m_pcDisparityFrame = NULL; + m_uiBlockSize = 9; +} + +Bool DisparityStereoBM::create( std::vector apcFrameList ) +{ + _BASIC_MODULE_API_2_CHECK_ + m_pcDisparityFrame = new PlaYUVerFrame( apcFrameList[0]->getWidth(), apcFrameList[0]->getHeight(), PlaYUVerFrame::GRAY ); + if( ( m_uiBlockSize % 2 ) == 0 ) + { + m_uiBlockSize++; + } +#if( CV_MAJOR_VERSION == 2) m_cStereoBM.state->preFilterCap = 31; m_cStereoBM.state->SADWindowSize = 9; m_cStereoBM.state->minDisparity = 0; @@ -53,18 +65,20 @@ DisparityStereoBM::DisparityStereoBM() m_cStereoBM.state->speckleWindowSize = 100; m_cStereoBM.state->speckleRange = 32; m_cStereoBM.state->disp12MaxDiff = 1; - -} - -Bool DisparityStereoBM::create( std::vector apcFrameList ) -{ - _BASIC_MODULE_API_2_CHECK_ - m_pcDisparityFrame = new PlaYUVerFrame( apcFrameList[0]->getWidth(), apcFrameList[0]->getHeight(), PlaYUVerFrame::GRAY ); - if( ( m_cStereoBM.state->SADWindowSize % 2 ) == 0 ) - { - m_cStereoBM.state->SADWindowSize++; - } + m_cStereoBM.state->SADWindowSize = m_uiBlockSize; m_cStereoBM.state->numberOfDisparities = ( ( ( apcFrameList[0]->getWidth() / 8 ) + 15 ) & -16 ); +#else + m_cStereoBM = cv::StereoBM::create( 16, m_uiBlockSize ); + m_cStereoBM->setPreFilterCap( 31 ); + m_cStereoBM->setBlockSize( m_uiBlockSize ); + m_cStereoBM->setMinDisparity( 0 ); + m_cStereoBM->setNumDisparities( ( ( ( apcFrameList[0]->getWidth() / 8 ) + 15 ) & -16 ) ); + m_cStereoBM->setTextureThreshold( 10 ); + m_cStereoBM->setUniquenessRatio( 15 ); + m_cStereoBM->setSpeckleWindowSize( 100 ); + m_cStereoBM->setSpeckleRange( 32 ); + m_cStereoBM->setDisp12MaxDiff( 1 ); +#endif return true; } PlaYUVerFrame* DisparityStereoBM::process( std::vector apcFrameList ) @@ -76,7 +90,12 @@ PlaYUVerFrame* DisparityStereoBM::process( std::vector apcFrameL cv::Mat* rightImage = InputRight->getCvMat( true ); cv::Mat disparityImage, disparityImage8; +#if( CV_MAJOR_VERSION == 2) m_cStereoBM( *leftImage, *rightImage, disparityImage ); +#else + m_cStereoBM->compute( *leftImage, *rightImage, disparityImage ); +#endif + disparityImage.convertTo( disparityImage8, CV_8U ); m_pcDisparityFrame->fromCvMat( &disparityImage8 ); diff --git a/modules/DisparityStereoBM.h b/modules/DisparityStereoBM.h index 5c40fe6..41b0f55 100644 --- a/modules/DisparityStereoBM.h +++ b/modules/DisparityStereoBM.h @@ -40,7 +40,13 @@ REGISTER_CLASS_FACTORY( DisparityStereoBM ) private: PlaYUVerFrame* m_pcDisparityFrame; + UInt m_uiBlockSize; +#if( CV_MAJOR_VERSION == 2) cv::StereoBM m_cStereoBM; +#else + cv::Ptr m_cStereoBM; +#endif + public: DisparityStereoBM(); virtual ~DisparityStereoBM() diff --git a/modules/PlaYUVerModuleFactory.cpp b/modules/PlaYUVerModuleFactory.cpp index db28eee..2181424 100644 --- a/modules/PlaYUVerModuleFactory.cpp +++ b/modules/PlaYUVerModuleFactory.cpp @@ -44,7 +44,7 @@ PlaYUVerModuleFactory::PlaYUVerModuleFactory() Register( "EightBitsSampling", &EightBitsSampling::Create ); Register( "LumaAverage", &LumaAverage::Create ); #ifdef USE_OPENCV - Register( "DisparityStereoVar", &DisparityStereoVar::Create ); + //Register( "DisparityStereoVar", &DisparityStereoVar::Create ); Register( "DisparityStereoBM", &DisparityStereoBM::Create ); #endif