卡尺工具实现步骤
不多逼逼,直接上步骤
Step1:根据给定的卡尺数,计算直线上的间断点,并保留间断点的位置,并返回。
Step2:在间断上生成若干个矩形卡尺工具,与直线垂直:
Step3:计算每个卡尺矩形的内部点位集合,存放在二维数组里,如图。从起始点进行遍历,沿着两个方向遍历。
Step4:遍历上面计算的点集合,在图片上将对应的像素保存在Mat对象中。上面的点集合计算结果是亚像素,因此需要进行插值。插值示意图如下:
以计算P点位置的像素为例, f(x,y)表示位置上的像素值, 计算方式如下:
P0 = f(1,0) * dis_x1 + f(0,0) * dis_x0;P1 = f(1,1) * dis_x1 + f(0,1) * dis_x0;
则P = P0 * dis_y0 + P1 * dis_y1;
Step5:对ROI图进行垂直投影,定位边缘点在ROI上的X值,Y值边取ROI宽度的一半,如图:
Step6:得到了ROI上边缘点的位置,要映射回原图上。最后根据找到点进行拟合直线。
实操
卡尺位置:
根据卡尺位置截图:
垂直投影:
一维数组放大图:
边缘处理:
最后提取边缘点X位置,映射到原图位置上,如下图。红色点是找到边缘点。蓝色点是计算ROI点集合时,遍历矩形的起始点
最后:文章来源:https://www.toymoban.com/news/detail-854871.html
原理已经说明白了,很简单花点时间琢磨一下是可以做出来的。当然了,需要源码可以私聊,一杯咖啡钱啦,算是一点点创作激励。假如看了源码,有不理解的地方,可以在文章下留言。文章来源地址https://www.toymoban.com/news/detail-854871.html
到了这里,关于用OPENCV,C++实现直线卡尺工具原理,一步到位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!