From c20fa63e4b57d62d33db77a5adc746ede902e5ed Mon Sep 17 00:00:00 2001 From: dirk Date: Sat, 1 Feb 2014 10:31:32 +0000 Subject: [PATCH] Added subImageSearch. --- Magick++/lib/Geometry.cpp | 23 ++++++++++++++++++----- Magick++/lib/Image.cpp | 22 ++++++++++++++++++++++ Magick++/lib/Magick++/Geometry.h | 3 +++ Magick++/lib/Magick++/Image.h | 8 ++++++++ Magick++/lib/Magick++/Include.h | 1 + 5 files changed, 52 insertions(+), 5 deletions(-) diff --git a/Magick++/lib/Geometry.cpp b/Magick++/lib/Geometry.cpp index 3906393b1..6970c79c6 100644 --- a/Magick++/lib/Geometry.cpp +++ b/Magick++/lib/Geometry.cpp @@ -203,8 +203,8 @@ const Magick::Geometry& Magick::Geometry::operator=( y = 0; size_t - height=0, - width=0; + height_val=0, + width_val=0; // If argument does not start with digit, presume that it is a // page-size specification that needs to be converted to an @@ -221,7 +221,7 @@ const Magick::Geometry& Magick::Geometry::operator=( } } - flags=GetGeometry(geom,&x,&y,&width,&height); + flags=GetGeometry(geom,&x,&y,&width_val,&height_val); if (flags == NoValue) { @@ -233,13 +233,13 @@ const Magick::Geometry& Magick::Geometry::operator=( if ((flags & WidthValue) != 0) { - _width=width; + _width=width_val; isValid(true); } if ((flags & HeightValue) != 0) { - _height=height; + _height=height_val; isValid(true); } @@ -363,6 +363,19 @@ Magick::Geometry::Geometry(const MagickCore::RectangleInfo &rectangle_) { } +const Magick::Geometry& Magick::Geometry::operator=( + const MagickCore::RectangleInfo &rectangle_) +{ + _width=static_cast(rectangle_.width), + _height=static_cast(rectangle_.height), + _xOff=static_cast(rectangle_.x), + _yOff=static_cast(rectangle_.y), + _xNegative=rectangle_.x < 0 ? true : false, + _yNegative=rectangle_.y < 0 ? true : false, + _isValid=true; + return(*this); +} + Magick::Geometry::operator MagickCore::RectangleInfo() const { RectangleInfo rectangle; diff --git a/Magick++/lib/Image.cpp b/Magick++/lib/Image.cpp index 1e0e8b473..f7bedd559 100644 --- a/Magick++/lib/Image.cpp +++ b/Magick++/lib/Image.cpp @@ -4194,6 +4194,28 @@ void Magick::Image::strip(void) ThrowPPException; } +Magick::Image Magick::Image::subImageSearch(const Image &reference_, + const MetricType metric_,Geometry *offset_,double *similarityMetric_, + const double similarityThreshold) +{ + MagickCore::Image + *newImage; + + RectangleInfo + offset; + + GetPPException; + newImage=SimilarityImage(image(),reference_.constImage(),metric_, + similarityThreshold,&offset,similarityMetric_,&exceptionInfo); + ThrowPPException; + if (offset_ != (Geometry *) NULL) + *offset_=offset; + if (newImage == (MagickCore::Image *) NULL) + return(Magick::Image()); + else + return(Magick::Image(newImage)); +} + void Magick::Image::swirl(const double degrees_) { MagickCore::Image diff --git a/Magick++/lib/Magick++/Geometry.h b/Magick++/lib/Magick++/Geometry.h index 8045d74d7..618f0fd27 100644 --- a/Magick++/lib/Magick++/Geometry.h +++ b/Magick++/lib/Magick++/Geometry.h @@ -125,6 +125,9 @@ namespace Magick // Construct from RectangleInfo Geometry(const MagickCore::RectangleInfo &rectangle_); + // Set via RectangleInfo + const Geometry& operator=(const MagickCore::RectangleInfo &rectangle_); + // Return an ImageMagick RectangleInfo struct operator MagickCore::RectangleInfo() const; diff --git a/Magick++/lib/Magick++/Image.h b/Magick++/lib/Magick++/Image.h index ad132581f..85e31fdd3 100644 --- a/Magick++/lib/Magick++/Image.h +++ b/Magick++/lib/Magick++/Image.h @@ -1244,6 +1244,14 @@ namespace Magick // Strip strips an image of all profiles and comments. void strip(void); + // Search for the specified image at EVERY possible location in this image. + // This is slow! very very slow.. It returns a similarity image such that + // an exact match location is completely white and if none of the pixels + // match, black, otherwise some gray level in-between. + Image subImageSearch(const Image &reference_,const MetricType metric_, + Geometry *offset_,double *similarityMetric_, + const double similarityThreshold=(-1.0)); + // Swirl image (image pixels are rotated by degrees) void swirl(const double degrees_); diff --git a/Magick++/lib/Magick++/Include.h b/Magick++/lib/Magick++/Include.h index 66e782377..8dbdb4a31 100644 --- a/Magick++/lib/Magick++/Include.h +++ b/Magick++/lib/Magick++/Include.h @@ -1319,6 +1319,7 @@ namespace Magick using MagickCore::ShearImage; using MagickCore::SigmoidalContrastImage; using MagickCore::SignatureImage; + using MagickCore::SimilarityImage; using MagickCore::SolarizeImage; using MagickCore::SparseColorImage; using MagickCore::SpliceImage; -- 2.50.1