Commit 5779c0ed authored by Maksim Shabunin's avatar Maksim Shabunin

Merge pull request #855 from sovrasov:line_descr_fix

parents dd55064f d7427cc6
......@@ -104,7 +104,7 @@ inline void checkLineExtremes( cv::Vec4f& extremes, cv::Size imageSize )
void LSDDetector::detect( const Mat& image, CV_OUT std::vector<KeyLine>& keylines, int scale, int numOctaves, const Mat& mask )
{
if( mask.data != NULL && ( mask.size() != image.size() || mask.type() != CV_8UC1 ) )
throw std::runtime_error( "Mask error while detecting lines: please check its dimensions and that data type is CV_8UC1" );
CV_Error( Error::StsBadArg, "Mask error while detecting lines: please check its dimensions and that data type is CV_8UC1" );
else
detectImpl( image, keylines, numOctaves, scale, mask );
......@@ -118,7 +118,7 @@ void LSDDetector::detect( const std::vector<Mat>& images, std::vector<std::vecto
for ( size_t counter = 0; counter < images.size(); counter++ )
{
if( masks[counter].data != NULL && ( masks[counter].size() != images[counter].size() || masks[counter].type() != CV_8UC1 ) )
throw std::runtime_error( "Masks error while detecting lines: please check their dimensions and that data types are CV_8UC1" );
CV_Error( Error::StsBadArg, "Masks error while detecting lines: please check their dimensions and that data types are CV_8UC1" );
else
detectImpl( images[counter], keylines[counter], numOctaves, scale, masks[counter] );
......@@ -136,7 +136,7 @@ void LSDDetector::detectImpl( const Mat& imageSrc, std::vector<KeyLine>& keyline
/*check whether image depth is different from 0 */
if( image.depth() != 0 )
throw std::runtime_error( "Error, depth image!= 0" );
CV_Error( Error::BadDepth, "Error, depth image!= 0" );
/* create a pointer to self */
LSDDetector *lsd = const_cast<LSDDetector*>( this );
......
......@@ -338,11 +338,11 @@ int BinaryDescriptor::descriptorSize() const
static inline int get2Pow( int i )
{
if( i >= 0 && i <= 7 )
return (int) pow( 2, (double) i );
return 1 << i;
else
{
throw std::runtime_error( "Invalid power argument" );
CV_Error( Error::StsBadArg, "Invalid power argument" );
return -1;
}
}
......@@ -421,7 +421,7 @@ void BinaryDescriptor::detect( const Mat& image, CV_OUT std::vector<KeyLine>& ke
}
if( mask.data != NULL && ( mask.size() != image.size() || mask.type() != CV_8UC1 ) )
throw std::runtime_error( "Mask error while detecting lines: please check its dimensions and that data type is CV_8UC1" );
CV_Error( Error::StsBadArg, "Mask error while detecting lines: please check its dimensions and that data type is CV_8UC1" );
else
detectImpl( image, keylines, mask );
......@@ -441,7 +441,7 @@ void BinaryDescriptor::detect( const std::vector<Mat>& images, std::vector<std::
for ( size_t counter = 0; counter < images.size(); counter++ )
{
if( masks[counter].data != NULL && ( masks[counter].size() != images[counter].size() || masks[counter].type() != CV_8UC1 ) )
throw std::runtime_error( "Masks error while detecting lines: please check their dimensions and that data types are CV_8UC1" );
CV_Error( Error::StsBadArg, "Mask error while detecting lines: please check its dimensions and that data type is CV_8UC1" );
else
detectImpl( images[counter], keylines[counter], masks[counter] );
......@@ -461,7 +461,7 @@ void BinaryDescriptor::detectImpl( const Mat& imageSrc, std::vector<KeyLine>& ke
/*check whether image depth is different from 0 */
if( image.depth() != 0 )
throw std::runtime_error( "Warning, depth image!= 0" );
CV_Error( Error::BadDepth, "Warning, depth image!= 0" );
/* create a pointer to self */
BinaryDescriptor *bn = const_cast<BinaryDescriptor*>( this );
......@@ -547,7 +547,7 @@ void BinaryDescriptor::computeImpl( const Mat& imageSrc, std::vector<KeyLine>& k
/*check whether image's depth is different from 0 */
if( image.depth() != 0 )
throw std::runtime_error( "Error, depth of image != 0" );
CV_Error( Error::BadDepth, "Error, depth of image != 0" );
/* keypoints list can't be empty */
if( keylines.size() == 0 )
......@@ -2196,6 +2196,11 @@ int BinaryDescriptor::EDLineDetector::EdgeDrawing( cv::Mat &image, EdgeChains &e
"numofedgePixel1 = " << offsetPFirst << ", numofedgePixel2 = " << offsetPSecond << ", MaxNumOfEdgePixel=" << edgePixelArraySize << std::endl;
return -1;
}
if( !(offsetPFirst && offsetPSecond) )
{
std::cout << "Edge drawing Error: lines not found" << std::endl;
return -1;
}
/*now all the edge information are stored in pFirstPartEdgeX_, pFirstPartEdgeY_,
*pFirstPartEdgeS_, pSecondPartEdgeX_, pSecondPartEdgeY_, pSecondPartEdgeS_;
......
......@@ -372,3 +372,18 @@ TEST( BinaryDescriptor_Descriptors, regression )
CV_BD_DescriptorsTest<Hamming> test( std::string( "lbd_descriptors_cameraman" ), 1 );
test.safe_run();
}
/****************************************************************************************\
* Other tests *
\****************************************************************************************/
TEST( BinaryDescriptor, no_lines_found )
{
Mat Image = Mat::zeros(100, 100, CV_8U);
Ptr<line_descriptor::BinaryDescriptor> binDescriptor =
line_descriptor::BinaryDescriptor::createBinaryDescriptor();
std::vector<cv::line_descriptor::KeyLine> keyLines;
binDescriptor->detect(Image, keyLines);
ASSERT_EQ(keyLines.size(), 0u);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment