Python - OpenCV 识别标志点并进行三维重建

自己创建了一种标识点,用于识别定位用,后期可用于 3D 重建。

创建这样的标识点,圆圈中的点数量作为标识点编号。


标识点形状
标识点识别结果

识别的时候先二值化,之后识别轮廓,创建轮廓的结构树:

_, contours, hierarchy = cv2.findContours(th3, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

之后 hierarchy 中第四列表示其父轮廓,没有父轮廓的就是最外侧的轮廓,之后识别其子轮廓个数,子轮廓个数为 1,形状接近椭圆的基本就是标识点的轮廓了(图中红色标出的)。
利用面积法检查椭圆的代码:

def check_ellipse(contour, ell):
    if ell is None:
        ell = cv2.fitEllipse(contour)
    if (((np.pi * ell[1][0] * ell[1][1] / 4) / cv2.contourArea(contour)) < 1.2) & \
            (((np.pi * ell[1][0] * ell[1][1] / 4) / cv2.contourArea(contour)) > 0.8):
        return True
    else:
        return False

实际拍摄的标识点较小的话就需要把阈值改大一点。
实际拍摄时会出现视角倾斜的情况,会拍成椭圆:

倾斜拍摄的标识点
倾斜识别的标识点

这是实际拍摄的标识点。

标识点实物
标识点实物识别情况
3D 重建效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。