这篇文章主要介绍了C++ OpenCV特征提取之如何实现亚像素级角点检测,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
前言
前面我们学习了Harris角点检测还有Shi-Tomasi角点检测等,如果我们要对有点的精度有更高的要求,就需要用到了亚像素级角点检测。其实在实际应用中可以看到,几乎所有的角点不会是一个真正的准确像素点。比如说我们得到的角点是(80,20),但是实际上是(80.223,20.789)。
亚像素定位方法
插值方法
基说图像矩计算
曲线拟合方法 -(高斯曲面、多项式、椭圆曲面)
在OpenCV中已经为我们提供了一个亚像素定位取值的函数了。
相关API
C++: void cornerSubPix(
InputArray image, --输入图像
InputOutputArray corners, --初始输入坐标和角坐标
Size winSize, --一半的侧长度搜索值
Size zeroZone, --一半区域在搜索区域中的求和公式。
TermCriteria criteria --标准终止迭代处理的隅角细化
)
代码演示
我们再新建一个项目名为opencv--corner,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法
首先我们还是用到了TrackBar
所以先定义TrackBar的参数
然后在代码中创建TrackBar
接下来就是我们最关键的函数SubPixel_Demo
显示效果
可以看到红色是我们原来用SHi-Toamsi角点检测出来的点,蓝色是用的亚像素检测出来的点会有小小的偏差,说明亚像素的点更精确一些,再看看命令行输出的我们的点的坐标,大部分都是带有小数的
感谢你能够认真阅读完这篇文章,希望小编分享的“C++ OpenCV特征提取之如何实现亚像素级角点检测”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。