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

_, 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

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