图像处理之canny---求梯度
梯度求法和sobel之类的算子雷同,甚至更简单,就是一个离散差分,不清楚的童鞋可以百度,一大堆资料呢,从源码也可清晰的看出原理。
// 方向导数,求梯度
/*
* @parameter sz: 图像大小
* @parameter pGray: 图像灰度值
* @parameter pGradx: 图像x轴梯度
* @parameter pGrady: 图像y轴梯度
* @parameter pMag : 图像梯度幅值
*/
void Grad(SIZE sz, LPBYTE pGray,int *pGradX, int *pGradY, int *pMag)
{
LONG y,x;
//中间变量
double dSqt1;
double dSqt2;
//x方向的方向导数
for(y=1;y<sz.cy-1;y++)
{
for(x=1;x<sz.cx-1;x++)
{
pGradX[y*sz.cx +x] = (int)( pGray[y*sz.cx+x+1]-pGray[y*sz.cx+ x-1] );
}
}
//y方向方向导数
for(x=1;x<sz.cx-1;x++)
{
for(y=1;y<sz.cy-1;y++)
{
pGradY[y*sz.cx +x] = (int)(pGray[(y+1)*sz.cx +x] - pGray[(y-1)*sz.cx +x]);
}
}
//求梯度
for(y=0; y<sz.cy; y++)
{
for(x=0; x<sz.cx; x++)
{
//二阶范数求梯度
dSqt1 = pGradX[y*sz.cx + x]*pGradX[y*sz.cx + x];
dSqt2 = pGradY[y*sz.cx + x]*pGradY[y*sz.cx + x];
pMag[y*sz.cx+x] = (int)(sqrt(dSqt1+dSqt2)+0.5);//四舍五入
}
}
}
用到的类型:
typedef struct {
int cy;
int cx;
} SIZE;
typedef unsigned char *LPBYTE;
typedef long LONG;
http://blog.csdn.net/crzy_sparrow/article/details/6999133
最新文章
- selenium:org.openqa.selenium.WebDriverException: f.QueryInterface is not a function
- JS中创建函数的三种方式及区别
- linux下python调用c模块
- day8-多进程和多线程
- 关于Tcp,为什么一定要进行三次握手呢?
- jqGrid初次使用遇到的问题及解决方法
- I2S和PCM
- jquery 核心
- java设计模式之——代理模式
- Amabri添加YDB报错
- 201521123053《Java课程设计》第七周学习总结
- asp.net网站管理工具 遇到错误。请返回上一页并重试。
- Python之线程
- WiFi安全网桥探讨
- k-近邻(KNN)算法改进约会网站的配对效果[Python]
- 使用JS获取input值
- js递归算法1+ 2+3.....100的和
- Print Article(斜率DP入门+单调队列)
- Golang &; GitLab-CI 详细实例步骤
- MongoDB 数据查询