用OPENCV,C++实现直线卡尺工具原理,一步到位

卡尺工具实现步骤

不多逼逼,直接上步骤

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点集合时,遍历矩形的起始点

搞定收工!!!

OpenCV中的卡尺工具是用于测量图像中物体的长度、角度和轮廓等属性的工具。通过将一根已知长度的标尺放置在图像上,可以利用卡尺工具来测量其他物体的长度。在OpenCV中,可以使用cv2.findContours()函数识别物体的轮廓,然后使用cv2.arcLength()函数计算轮廓的长度。 使用OpenCV进行卡尺测量的步骤如下: 1. 读取图像,并转换为灰度图像。 2. 对图像进行二值化处理,以便更好地识别边缘。 3. 使用cv2.findContours()函数找到图像中的物体轮廓。 4. 对于每个轮廓,使用cv2.arcLength()函数计算轮廓的长度。 5. 进行单位转换,将像素长度转换为实际物体的单位长度。 6. 根据需要可以使用cv2.drawContours()函数绘制出物体的轮廓。 除了长度,卡尺工具也可以用于测量物体的角度。通过分析物体轮廓的形状,可以使用OpenCV的函数来计算物体的角度。可以使用cv2.minAreaRect()函数计算轮廓的最小外接矩形,然后使用cv2.boxPoints()函数获取矩形的四个顶点坐标,最后可以使用cv2.line()函数绘制出两条垂直于矩形的线段。通过计算这两条线段的夹角,即可得到物体的角度。 总而言之,OpenCV卡尺工具提供了一种方便快捷的方法来测量图像中物体的长度、角度和轮廓等属性。其主要基于图像处理和计算机视觉的技术,可以应用于各种领域,如机器视觉、图像分析和测量等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值