1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| void sobel(IplImage *src, IplImage *dst, bool dir){
// Masques de convolution
CvMat* sobel = cvCreateMat( 3, 3, CV_32FC1);
cvSet( sobel, cvScalar( 0 ) );
if( dir == true){
cvmSet( sobel, 0, 0,-1);
cvmSet( sobel, 0, 2,1);
cvmSet( sobel, 1, 0,-2);
cvmSet( sobel, 1, 2,2);
cvmSet( sobel, 2, 0,-1);
cvmSet( sobel, 2, 2,1);
}
else{
cvmSet( sobel, 0, 0,1);
cvmSet( sobel, 0, 1,2);
cvmSet( sobel, 0, 2,1);
cvmSet( sobel, 2, 0,-1);
cvmSet( sobel, 2, 1,-2);
cvmSet( sobel, 2, 2,-1);
}
cvFilter2D( src, dst, sobel );
int main(){
IplImage * src = cvLoadImage("xxxx.png",1);
IplImage * src = cvLoadImage("xxxx.png",1);
IplImage *gray = cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_8U,1);
IplImage *sobx = cvCloneImage(gray);
IplImage *soby = cvCloneImage(gray);
IplImage *sobine = cvCloneImage(gray);
sobel(gray,sobx,1);
sobel(gray,soby,0);
CvScalar p1,p2,p3;
for(int x=0;x<img->width;x++){
for(int y=0;y<img->height;y++){
p1 = cvGet2D(sobx,y,x);
p2 = cvGet2D(soby,y,x);
p3.val[0] = sqrt(p1.val[0]*p1.val[0] + p2.val[0]*p2.val[0]);
cvSet2D(sobine,y,x,p3);
}
}
// Que faire de sobx et soby sachant que je souhaite leur norme dans sobine ?
} |
Partager