10iii
2013-08-27 10:24:44 +08:00
说个思路吧,不管时间复杂度:
struct image {
int w;
int h;
int* buf;
} imageFoFind, imageFindFrom;
findImagesFuzzilyIgnoreColor(imageToFind, imageFindFrom, colorValue, fuzzyValue) {
int i,j;
for (i=0;i<imageFindFrom.w-imageToFind.w;i++)
for (j=0;j<imageFindFrom.h-imageToFind.h;j++)
if match(imageToFind, imageFindFrom, colorValue, fuzzyValue,i,j) location.push([i,j]);
return location;
}
int match (imageToFind, imageFindFrom, colorValue, fuzzyValue,i,j) {
int max=imageToFind.w*imageToFind.h*(1-fuzzyValue);
int d=0,x,y;
for (x=0;x<imageToFind.w;x++)
for (y=0;y<imageToFind.h;y++) {
if ((imageToFind.buf[x][y]!=imageFindFrom[i+x][j+y])&&(imageFindFrom[i+x][j+y]!=colorValue)&&(imageToFind.buf[x][y]!=colorValue)) d++;
if d>max return 0;
}
return 1;
}
基本就这样吧。不排除语法错误,编译肯定通不过。