输入图像寻找参考点 https://i.stack.imgur.com/g0Dt1.png
我的问题陈述是我想测量钻头的长度。因此,如果我自动获得两个参考点,那么我将应用欧几里德距离公式进行距离测量。
在那张图片中,有两个红点。这两个红点是手动标记的。当我将钻头放在皮带上时,它会自动获取点。
我希望你能给我你的想法、相关链接和示例代码。我在 Python 3.8 上使用 OpenCV
自动标记终点
-
将 BGR 图像转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
-
使用模糊方法去除噪音。
median = cv2.medianBlur(gray, size)
-
由于只有钻头是深黑色的,因此您可以轻松地使用阈值方法来获得钻头形状。
img_thresh = cv2.Threshold(median,threshold_value,255,cv2.THRESH_BINARY_INV)
-
使用 findContours 获取钻头的轮廓
contours, hierarchy = cv2.findContours(img_thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
假设在阈值之后只剩下钻取,选择最大的一个作为钻取。否则,您需要使用一些条件来选择要钻孔的轮廓。
-
使用 cv2.minAreaRect 获取绑定形状的最小矩形。
rect = cv2.minAreaRect(contours[0])
然后你可以很容易地通过矩形的长度得到钻孔的像素长度,如果你还想标记端点,你可以测试哪些点在矩形的短边上,或者只标记短边的中点来得到近似值位置。
计算像素长度到现实世界的长度
有多种实现方法,具体取决于不同的情况以及您想要的准确度。
-
进行相机标定,纠正相机畸变,得到相机的内参。
https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html
在计算像素长度之前,使用它们来获取无失真图像。
dst = cv.undistort(img, mtx, dist, None, newcameramtx)
-
由于相机很难垂直于平面,因此必须计算图像与现实世界之间的坐标关系。
将校准板放在工作台上,最好将校准板放置在与钻头终点相同的高度。使用内在/外在矩阵计算图像到现实世界坐标的像素坐标。然后您可以使用上面计算的终点像素坐标来获取真实世界位置并使用欧氏距离来获取距离。如果您假设相机垂直于平面。您可以直接使用标尺或校准板来计算像素与现实世界的比例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)