bonjour à tous,
je suis débutante en processing, et je bloque sur ce code. J'aimerai que processing me transforme des images en quelque chose de ce genre:
http://www.buamai.com/image/45399 (en moins complexe car bien sur c'est quand même Sergio Albiac), mais dans cet esprit de toile quitte à modifier par la suite mon image dans photoshop pour les transparences...
J'ai un code qui permet de mettre des points selon les pixels de l'image, je n'arrive pas a relier tous les points qui sont à une certaine distance les uns des autres.
est-ce compliqué a réaliser? est ce que quelqu'un pourrait m'apporter des précisions?
merci.
marjorie
"outline" by Procsilas Moscas, licensed under Creative Commons Attribution-Share Alike 3.0 and GNU GPL license.
Work: http://openprocessing.org/visuals/?visualID= 59807
License:
http://creativecommons.org/licenses/by-sa/3.0/
http://creativecommons.org/licenses/GPL/2.0/
String iName="image.jpg"; void setup() { llegeixImatge("./"+iName); size(img.width, img.height); } int NP=10000; int B=1; float THR=50; // range 5-50 float MD=10; // range 0-10 int NMP=6; // range 1-15 float[][] punts; color[] cpunts; int [] usat; int [] NmP=new int[NMP]; float [] NdmP=new float[NMP]; int inici=0; PImage img; void llegeixImatge(String s) { img = loadImage(s); img = loadImage("image.jpg"); } float fVar(int x, int y) { // neighborhood 2B+1x2B+1 pixels float m=0; for (int k1=-B; k1<=B; k1++) { for (int k2=-B; k2<=B; k2++) { color c=img.pixels[(y+k1)*img.width+(x+k2)]; m+=brightness(c); } } m/=float((2*B+1)*(2*B+1)); float v=0; for (int k1=-B; k1<B; k1++) { for (int k2=-B; k2<B; k2++) { color c=img.pixels[(y+k1)*img.width+(x+k2)]; v+=(brightness(c)-m)*(brightness(c)-m); } } v=sqrt(v)/(float) (2*B+1); return v; } void creaPunts() { punts = new float[NP][2]; cpunts = new color[NP]; usat = new int[NP]; int nint1=0; int nint2=0; for (int i=0; i<NP;) { int x=B+int(random(width-2*B)); int y=B+int(random(height-2*B)); //println(i+" = "+x+", "+y+": "+THR+", "+MD); // points need to be at least MD far from each other int flag=0; if (MD>0.0) { for (int j=0; flag==0 && j<i; j++) { if (dist(x, y, punts[j][0], punts[j][1])<MD) { flag=1; } } } if (flag==0) { nint1=0; float f=fVar(x, y); // use only "valid" points if (f>=THR) { nint2=0; punts[i][0]=x; punts[i][1]=y; cpunts[i]=img.pixels[y*img.width+x]; usat[i]=0; i++; } else { nint2++; if (nint2>=10) { THR/=(1+1.0/float(NP-i)); MD/=(1+1.0/float(NP-i)); nint2=0; } } } else { nint1++; if (nint1>=10) { MD/=2.0; THR*=1.618; nint1=0; } } } } int NessimMesProper(int i) { if (NMP<=1) { int mP=-1; float dmP=dist(0, 0, width, height); for (int j=0; j<NP; j++) { if (usat[j]==0) { float jmP=dist(punts[i][0], punts[i][1], punts[j][0], punts[j][1]); if (jmP<dmP) { dmP=jmP; mP=j; } } } return mP; } else { for (int j=0; j<NMP; j++) { NmP[j]=-1; NdmP[j]=dist(0, 0, width, height); } for (int j=0; j<NP; j++) { if (usat[j]==0) { float jmP=dist(punts[i][0], punts[i][1], punts[j][0], punts[j][1]); int k=NMP; while(k>0 && NdmP[k-1]>jmP) { k--; } if (k<NMP) { for (int l=0; l<(NMP-k)-1; l++) { NmP[(NMP-1)-l]=NmP[(NMP-1)-(l+1)]; NdmP[(NMP-1)-l]=NdmP[(NMP-1)-(l+1)]; } NmP[k]=j; NdmP[k]=jmP; } } } return NmP[NMP-1]; } } int fase=0; void draw() { if (fase==0) { creaPunts(); background(#FFFFFF); fase=1; } else { if (inici!=-1) { usat[inici]=1; int seguent=NessimMesProper(inici); if (seguent!=-1) { point(punts[inici][0], punts[seguent][1]); } inici=seguent; } else { save("outline_"+iName); noLoop(); } } }
Dernière modification par marjorie-rf (2012-05-14 13:51:31)
Hors ligne
Le principal soucis c'est qu'il code en espagnol, et qu'il n'y a pas de commentaire :\
Hors ligne
En essayant de faire un truc qui correspond a ce que tu cherches, je suis arrivé a ça:
Hors ligne
Pages: 1