基于OpenCV实现,仿Halcon卡尺工具

最近实现了一下卡尺定位的工具,在这里分享一些过程中遇到的一些问题和解决方法

首先,原理

基于OpenCV实现,仿Halcon卡尺工具_第1张图片

 沿着我们确定好的方向采样后就会得到一个NxM(宽x长)大小的图,对这个图我们进行投影得到一个1xM大小的图,这里投影及一阶导数是这样子的(红色即待求亚像素位置):

 基于OpenCV实现,仿Halcon卡尺工具_第2张图片

一开始做到这里的时候提取像素级坐标是没问题的,但尝试用拟合二次函数的方法计算亚像素坐标时候总是有偏差。一开始以为是双线性插值的精度不够,尝试了双三次插值后结果还是一样。

最后在查阅VisionPro相关资料后,资料中给出的插值方式如下:

基于OpenCV实现,仿Halcon卡尺工具_第3张图片

 P1、P2、P3、P4为邻近四个像素,a、b、c、d为待插值坐标距离邻近像素中心位置距离,绿点所表示的像素值可由下面公式计算得出

(1-a)(p2\times (1-b)+p1\times b)+a\times (p3\times (1-b)+p4\times b)

至此算法核心部分问题已解决,剩下便可以根据原理计算出亚像素坐标,附效果图

基于OpenCV实现,仿Halcon卡尺工具_第4张图片

基于OpenCV实现,仿Halcon卡尺工具_第5张图片

感谢@yixiaopao的指正,源代码92行为图像分配了不正确的长度,应该把*sizeof(float_t)删掉;不过不删的话也不会造成泄露。

开发不易,请作者喝杯咖啡!感谢(拜托下载前自己先看一下,头文件私信我获取)

再次声明下,代码不包括拖拽等你想象的功能(从文件大小也能看的出来),请谨慎下载,毕竟原理都已说明白了,私信与我交流想自己实现的我也已经尽量回复了。

源代码下载链接https://download.csdn.net/download/qq_37299618/36451540https://download.csdn.net/download/qq_37299618/36451540

你可能感兴趣的:(opencv)