La risposta di cui sopra è vicino, ma mancano alcuni elementi chiave che mi ha portato un po 'per capire. Ho modificato le mappe in modo che calcolino correttamente lo zoom e si restringano e le aggiungono/sottraggono da x e y in ogni posizione (altrimenti finirai per rimappare l'immagine in un quadratino. sfocatura a * sfocatura altrimenti le tue mappe conterranno numeri molto grandi e semplicemente non usciranno a destra (multipli molto grandi di ogni posizione)
float center_x = width/2; //or whatever
float center_y = height/2;
float blur = 0.002; //blur radius per pixels from center. 2px blur at 1000px from center
int iterations = 5;
Mat growMapx, growMapy;
Mat shrinkMapx, shrinkMapy;
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
growMapx[x,y] = x+((x - center_x)*blur);
growMapy[x,y] = y+((y - center_y)*blur);
shrinkMapx[x,y] = x-((x - center_x)*blur);
shrinkMapy[x,y] = y-((y - center_y)*blur);
}
}
Mat tmp1, tmp2;
for(int i = 0; i < iterations; i++) {
remap(src, tmp1, growMapx, growMapy, CV_INTER_LINEAR); // enlarge
remap(src, tmp2, shrinkMapx, shrinkMapy, CV_INTER_LINEAR); // shrink
addWeighted(tmp1, 0.5, tmp2, 0.5, 0, src); // blend back to src
}
fonte
2012-12-04 09:37:15
stavo per pubblicare la stessa domanda. –