openCV中cvSobel函数的用法浅析

第一步:开辟两个和原始图像一样大小的图像内存区,只是 
其深度为IPL_DEPTH_16S,假设原始图像为pSrc(iplimage结构) 
IplImage *p16SX = cvCreateImage(cvSize(pSrc->width,pSrc->height) 
,IPL_DEPTH_16S,1); 
IplImage *p16SY = cvCreateImage(cvSize(pSrc->width,pSrc->height) 
,IPL_DEPTH_16S,1); 
p16SX->origin = pSrc->origin; 
p16SY->origin = pSrc->origin; 
第二步:调用cvSobel进行边缘计算 
cvSobel(pSrc,p16SX,1,0,3);//x方向的边缘 
cvSobel(pSrc,p16SY,0,1,3);//y方向的边缘 
第三步:计算sqrt(x^2+y^2),得到幅值图像 
cvMul(p16SX,p16SX,p16SX,1.0); 
cvMul(p16SY,p16SY,p16SY,1.0); 
cvAdd(p16SX,p16SY,p16SX,0); 
最后一步:将16S图像转化成8bit图像 
cvConvert(p16SX,pDst); 

或者使用:

IplImage *sobel8u=cvCreateImage(cvGetSize(pSrc),IPL_DEPTH_8U,1);

cvConvertScaleAbs(p16SX,sobel8u,1,0);


两点说明: 
1、如果对时间要求不太高,建议在做完第二步后,第三步之前, 
将得到的16S图像转换成32F图像,这样得到的结果会更加精确。 
2、第三步中cvAdd,你可以另外开辟一个内存区存放结果, 

转自:http://www.newsmth.net/nForum/#!article/Graphics/29028

转载于:https://www.cnblogs.com/YCwavelet/p/3590905.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值