#include "cv.h"
#include "highgui.h"
using namespace cv;
#define PI 3.1415926
int prewitt_x[3][3]={{-1,0,1},{-1,0,1},{-1,0,1}};
int prewitt_y[3][3]={{-1,-1,-1},{0,0,0},{1,1,1}};
int sobel_x[3][3]={{-1,0,1},{-2,0,2},{-1,0,1}};
int sobel_y[3][3]={{-1,-2,-1},{0,0,0},{1,2,1}};
int main()
{
//读取图像
Mat image;
image=imread("circle.jpg",CV_LOAD_IMAGE_GRAYSCALE);
int M=image.rows;
int N=image.cols;
//边缘提取
//prewitt
Mat temp=image.clone();
for(int i=1;i<M-1;i++)
{
for(int j=1;j<N-1;j++)
{
double dx=0,dy=0;
for(int i1=-1;i1<=1;i1++)
{
for(int j1=-1;j1<=1;j1++)
{
uchar* p=temp.ptr<uchar>(i+i1);
#if 0
dx+=(prewitt_x[i1+1][j1+1]*p[j+j1]);
dy+=(prewitt_y[i1+1][j1+1]*p[j+j1]);
#else
dx+=(sobel_x[i1+1][j1+1]*p[j+j1]);
dy+=(sobel_y[i1+1][j1+1]*p[j+j1]);
#endif
}
}
uchar* p=image.ptr<uchar>(i);
p[j]=(int)(sqrt(dx*dx+dy*dy));
}
}
cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
imshow("test",image);
waitKey(0);
return 0;
}
图像处理之边缘提取
最新推荐文章于 2025-04-05 16:27:04 发布