Opencv中的几种边缘检测算法
来源:互联网 发布:java培训机构排名 编辑:程序博客网 时间:2024/05/16 01:42
1、Sobel导数
Sobel算子结合了高斯平滑和微分求导。可以用来计算图像灰度函数的近似梯度。计算时是将原图像分别与水平方向和竖直方向的奇数大小的内核进行卷积,然后再图像的每一点上进行计算(求根号下两数的平方和,有时会用两数的绝对值和)得出近似梯度。
当内核大小等于3时使用Sobel内核的误差会比较大,在这里可以使用Scharr内核进行计算(将内核大小设为-1时调用的是Scharr内核)。
在求导时,最好水平竖直分开求然后再加起来,效果会好一点。
还有就是要将输出类型设为CV_16S以防止溢出.
void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize = 3, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT );
前两个参数为输入输出图像,
第三个参数为输出图像的类型,
然后第四个和第五个参数为x,y方向上的导数的阶数
第六个参数为所使用的内核的大小,设为-1时使用Scharr内核
最后三个参数均使用默认值即可。
代码如下:
int main(){ Mat a = imread("738b4710b912c8fc453a8235fe039245d7882178.jpg"); imshow("原图", a); cvtColor(a, a, CV_RGB2GRAY); //转为灰度图 Mat ax, ay; Mat axx, ayy; Sobel(a, ax, CV_16S, 1, 0,-1); Sobel(a, ay, CV_16S, 0, 1,-1); convertScaleAbs(ax, axx); //将CV_16S转为CV_8U convertScaleAbs(ay, ayy); addWeighted(axx, 0.5, ayy, 0.5, 0,a); //将两图相加 imshow("效果图", a); cvWaitKey(10000);}
2、Laplace 算子
Laplacian 算子 的定义:
是对二维图像求的二阶偏导数,在函数中由于 Laplace使用了图像梯度,它内部调用了 Sobel 算子。
在Laplace算子中无法调用Scharr内核。同样输出图像的类型要定为CV_16S以防止溢出。
void Laplacian( InputArray src, OutputArray dst, int ddepth, int ksize = 1, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT );
第三个参数为输出图像的类型,然后是内核的大小。
后三个参数均使用默认就行了。
代码如下:
int main(){ Mat a = imread("738b4710b912c8fc453a8235fe039245d7882178.jpg"); imshow("原图", a); cvtColor(a, a, CV_RGB2GRAY); //转为灰度图 Mat aa; Laplacian(a, aa, CV_16S,3); Mat aaa; convertScaleAbs(aa, aaa); //将CV_16S转为CV_8U imshow("效果图", aaa); cvWaitKey(10000);}
效果图:
3、Canny算法
Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法。调用也很简单,输入输出图像可以用同一幅。
代码如下:
int main(){ Mat a = imread("738b4710b912c8fc453a8235fe039245d7882178.jpg"); imshow("原图", a); cvtColor(a, a, CV_RGB2GRAY); //转为灰度图 Canny(a, a, 100, 300, 3); imshow("效果图", a); cvWaitKey(10000);}
运行图:
1 0
- Opencv中的几种边缘检测算法
- 修改opencv中的canny边缘检测算法
- OpenCV几种边缘检测的方法
- OpenCV 中的边缘检测
- canny opencv边缘检测算法
- opencv 边缘检测 Contours 算法
- OpenCV几种边缘检测的简例
- EmguCV Image类中的函数(三)几种边缘检测算法和仿射变换
- opencv程序三:canny边缘检测算法
- OpenCV图像边缘检测(Canny算法)
- OpenCV图像边缘检测(sobel算法)
- OpenCV图像边缘检测(Laplace算法)
- 【OpenCV】Canny 边缘检测
- Opencv边缘检测
- opencv-canny边缘检测
- OpenCV边缘检测
- opencv canny边缘检测
- opencv-边缘检测
- mac 提示This client is too old to work with the working copy at...
- 关于dB单位的一些总结
- 2014届华为上机题目及参考答案
- mybatis显示sql语句 log4j.properties配置文件
- Java性能优化(11):考虑实现Comparable接口
- Opencv中的几种边缘检测算法
- LightOJ 1370-Bi-shoe and Phi-shoe(欧拉函数)
- 【Github教程】史上最全github使用方法:github入门到精通
- domino解决删除用户后还存在邮件数据库问题
- HDU - 3046 Pleasant sheep and big big wolf(最小割)
- hdu5327 Olympiad(数组前缀和+set判重)
- 网络分析软件和linux下网络性能测试软件iperf
- Spring依赖注入(DI)
- easyUI数据统计列表中根据单元格数值控制显示效果