自己写的Sobel边缘检测程序
来源:互联网 发布:java实用教程第三版pdf 编辑:程序博客网 时间:2024/05/21 17:05
前一段时间做一个项目时,首先用matlab做边缘检测看检测结果,之后有用OPENCV中自带的Sobel边缘检测函数测试,发现和matlab检测的结果差距较大,于是自己实现了一个Sobel边缘检测程序;
void mysobel(IplImage* src,IplImage* dst,int threshold)
{
/* cvCvtColor(src,dst,CV_RGB2GRAY);*/
int w=src->width;
int h=src->height;
int step=src->widthStep;
uchar* p=(uchar*)src->imageData;
uchar* q=(uchar*)dst->imageData;
int p1,p2,p3,p4,p5,p6,p7,p8,p9;
double m,n;
for(int f=0;f<h-2;f++)
{
for(int k=0;k<w-2;k++)
{
p1=p[f*step+k];
p2=p[f*step+(k+1)];
p3=p[f*step+(k+2)];
p4=p[(f+1)*step+k];
p5=p[(f+1)*step+(k+1)];
p6=p[(f+1)*step+(k+2)];
p7=p[(f+2)*step+k];
p8=p[(f+2)*step+(k+1)];
p9=p[(f+2)*step+(k+2)];//得到(i+1,j+1)周围九个点的灰度值
m=fabs(double(p3+2*p6+p9-p1-2*p4-p7));
//n=fabs(double(p7+2*p8+p9-p1-2*p2-p3));//应用sobel算子做差分,得到(i+1,j+1)点的微分值
// if(sqrt(m*m+n*n)<threshold)//设定阈值(即梯度大小)以检测是否为一阶导数的极大值点,即边缘点
// {
// q[(f+1)*step+(k+1)]=0;
// }
if (m<threshold) //只做垂直方向边缘检测
{
q[(f+1)*step+(k+1)]=0;
}
else
{
q[(f+1)*step+(k+1)]=255;
}
}
}
return;
}
- 自己写的Sobel边缘检测程序
- Sobel算子的边缘检测实现
- Sobel边缘检测的OpenCV实现
- 基于FPGA的sobel边缘检测
- 灰度图像的sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测
- Sobel边缘检测算法
- sobel 边缘检测算法
- Sobel边缘检测算法
- sobel边缘检测算子
- Sobel 边缘检测
- sobel边缘检测
- Sobel边缘检测(matlab)
- Sobel 边缘检测
- spring依赖注入方法实例
- 松本行弘的程序世界(二)
- 判断一个数是否为素数
- spring自动装配总结
- myeclipse9.1破解方法
- 自己写的Sobel边缘检测程序
- 在WinForm/C#中打开一个文件,主要是用到进程的知识。
- .net升级到4.0之后,出现;System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798
- 关于使用UILocalizedIndexedCollation 实现tableview的边索引
- 在 vi 中替换字符串
- zoj-1088-System Overload
- linux下的共享库(动态库)和静态库
- Android平台上从Camera的jpegquality菜单研究JNI接口
- Spring aop术语概述