¡El problema de diferencia de segundo orden de Opencv es urgente!
#includelt;iostreamgt;
#includelt;cv.hgt;
#includelt;highgui.hgt;
usando?namespace ?std;
#define?MGETP1(x,y,z,ch,im,type)?(((tipo*)(im-gt;imageData (y)*im-gt;widthStep) )[ch*(x) z])
int?main(){string?s;
s=/*Completa la ruta de la imagen tú mismo*/;
IplImage*?sim=cvLoadImage(s.c_tr());
IplImage*?resx=cvCreateImage(cvGetSize(sim), IPL_DEPTH_32F, 3);
IplImage*?resy=cvCreateImage(cvGetSize(sim), IPL_DEPTH_32F, 3);
int?x, y
for(x=2; xlt; sim-gt; ancho-2; x )
{
for(y=2; ylt; sim-gt; altura-2; y )
{
int?x0, x1, x2, y0, y1, y2;
x0=MGETP1(x-1, y, 0, 3, sim, uchar);
x1=MGETP1(x, y, 0, 3, sim, uchar);
x2=MGETP1(x 1, y, 0, 3, sim, uchar); MGETP1(x,y,0,3,resx,float)=x0 x2-2*x1;
x0=MGETP1(x,y-1,0,3,sim,uchar); p>
p>
x1=MGETP1(x,y,0,3,sim,uchar);
x2=MGETP1(x,y 1,0,3,sim,uchar );
MGETP1(x,y,0,3,resy,float)=y0 y2-2*y1;
x0=MGETP1(x-1,y,0, 3,sim,uchar );
x1=MGETP1(x, y, 0, 3, sim, uchar
x2=MGETP1(x 1, y, 0, 3); , sim, uchar) ;
MGETP1(x,y,0,3,resx,float)=x0 x2-2*x1;
x0=MGETP1(x,y- 1,1,3 , sim, uchar);
x1=MGETP1(x, y, 1, 3, sim, uchar);
x2=MGETP1(x, y 1); , 1, 3, sim, uchar);
MGETP1(x, y, 1, 3, resy, float)=y0 y2-2*y1;
x0=MGETP1( x-1, y , 2, 3, sim, uchar);
x1=MGETP1(x, y, 2, 3, sim, uchar);
x2=MGETP1( x 1, y, 2, 3, sim, uchar);
MGETP1(x, y, 2, 3, resx, float)=x0 x2-2*x1;
x0=MGETP1(x, y
-1, 2, 3, sim, uchar);
x1=MGETP1(x, y, 2, 3, sim, uchar);
x2=MGETP1(x, y); 1, 2, 3, sim, uchar);
MGETP1(x, y, 2, 3, resy, float)=y0 y2-2*y1;
} p>
}
cvShowImage("x2Diff",?resx);
cvShowImage("y2Diff",?resy);
cvWaitKey() ;
cvReleaseImage(amp; resx);
cvReleaseImage(amp; resy);
cvReleaseImage(amp; sim);
return?0;
}
Tienes que normalizar la diferencia de segundo orden para que esté entre 0-255 antes de poder comerlo~