[magick-users] sub Image Locating
Anthony Thyssen
anthony at griffith.edu.au
Mon May 12 18:54:31 PDT 2008
Elia Mazzawi on wrote...
| Hello,
|
| I have 100's of PNG files, that may or may not contain a smaller image
| that I have in another smaller PNG file.
| I want to write a program to test if the sub Image exists in the larger
| Image, and at what location if it does.
|
| I think that since these are PNG not JPEGs there is no fuzzy logic
| matching needed.
|
| i've been trying to get the pixels out of both images ( using getPixels
| ) and comparing the binary.
|
| but I'm not sure what parameters i should give getPixels(). or if there
| is a better way to do this.
|
| any help is appreciated.
|
There was a library routine added to the IM library, which was for
locating sub-images like this. As well as a seperate C program for
testing it.
Hmmmm....
here it is, an old email on the IM users mailing list...
=======8<--------CUT HERE----------axes/crowbars permitted---------------
Subject: Re: [magick-users] How to locate (x, y) coordinates of one sub-image within another?
From: koyaanisqatsi at imagemagick.org
Date: Fri, 7 Jul 2006 07:07:16 -0700 (Sat 00:07 EST)
To: A.Thyssen at griffith.edu.au, magick at gabe.com
Cc: koyaanisqatsi at imagemagick.org, magick-users at imagemagick.org,
swp5jhu02 at sneakemail.com
We added IsImageSimilar() to ImageMagick 6.2.8-4 Beta if anyone wants to
take a look at the solution to locating coordinates of a sub-image within
another image. It works in all colorspaces and accounts for image masks.
Below a test program for IsImageSimilar(). Compile with:
cc `Magick-config --cflags --cppflags` -o similar similar.c \
`Magick-config --ldflags --libs`
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <magick/MagickCore.h>
int main(int argc,char **argv)
{
ExceptionInfo
*exception;
Image
*crop_image,
*image;
ImageInfo
*image_info;
long
x,
y;
RectangleInfo
region;
if (argc != 2)
{
(void) fprintf(stdout,"Usage: %s image\n",argv[0]);
exit(0);
}
InitializeMagick(*argv);
exception=AcquireExceptionInfo();
image_info=CloneImageInfo((ImageInfo *) NULL);
(void) strcpy(image_info->filename,argv[1]);
image=ReadImage(image_info,exception);
if (exception->severity != UndefinedException)
CatchException(exception);
if (image == (Image *) NULL)
exit(1);
region.width=100;
region.height=100;
region.x=100;
region.y=100;
crop_image=CropImage(image,®ion,exception);
x=0;
y=0;
IsImageSimilar(image,crop_image,&x,&y,exception);
printf("%ld %ld\n",x,y);
image=DestroyImageList(image);
image_info=DestroyImageInfo(image_info);
exception=DestroyExceptionInfo(exception);
DestroyMagick();
return(0);
}
=======8<--------CUT HERE----------axes/crowbars permitted---------------
If you have any success, or lack of it, please report.
I have not looked at it since it came out.
Anthony Thyssen ( System Programmer ) <A.Thyssen at griffith.edu.au>
-----------------------------------------------------------------------------
``Sorry 'bout that Chief!''
``Missed it, by that much!'' -- Get Smart
-----------------------------------------------------------------------------
Anthony's Home is his Castle http://www.cit.gu.edu.au/~anthony/
More information about the Magick-users
mailing list