OpenCV摄像头识别黑色矩形:获取顶点坐标 (Python代码示例)

本教程将教你如何使用OpenCV和Python从摄像头实时画面中识别黑色矩形,并获取其四个顶点的坐标。

代码示例pythonimport cv2import numpy as np

def find_black_rectangle(frame): # 将图像转换为灰度图 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# 对灰度图进行阈值处理,将黑色部分变为白色,其他部分变为黑色    _, threshold = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

# 查找轮廓    contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for contour in contours:        # 计算轮廓的周长        perimeter = cv2.arcLength(contour, True)

    # 使用多边形拟合轮廓        approx = cv2.approxPolyDP(contour, 0.02 * perimeter, True)

    # 如果多边形有4个顶点,并且是凸的,则认为是矩形        if len(approx) == 4 and cv2.isContourConvex(approx):            return approx.reshape(-1, 2)  # 返回矩形的4个顶点坐标

return None

打开摄像头cap = cv2.VideoCapture(0)

while True: ret, frame = cap.read()

if not ret:        break

# 查找黑色矩形    rectangle = find_black_rectangle(frame)

if rectangle is not None:        # 绘制矩形轮廓        cv2.drawContours(frame, [rectangle], -1, (0, 255, 0), 2)

    # 绘制矩形的4个顶点        for (x, y) in rectangle:            cv2.circle(frame, (x, y), 5, (0, 0, 255), -1)

# 显示图像    cv2.imshow('Frame', frame)

# 按下 'q' 键退出    if cv2.waitKey(1) & 0xFF == ord('q'):        break

释放摄像头并关闭窗口cap.release()cv2.destroyAllWindows()

代码解析

  1. 导入库: 首先,导入必要的库:cv2 用于OpenCV图像处理,numpy 用于数值计算。2. find_black_rectangle 函数: - 将输入图像转换为灰度图。 - 使用阈值处理将黑色部分与其他部分分离。 - 查找图像中的轮廓。 - 遍历每个轮廓: - 使用 cv2.approxPolyDP 函数将轮廓近似为多边形。 - 如果多边形有4个顶点并且是凸的,则认为它是矩形,并返回其顶点坐标。3. 主循环: - 打开默认摄像头 (cv2.VideoCapture(0)). - 循环读取摄像头画面帧。 - 调用 find_black_rectangle 函数查找黑色矩形。 - 如果找到矩形: - 在画面帧上绘制矩形轮廓。 - 在矩形的每个顶点上绘制圆圈。 - 显示处理后的画面帧。 - 按下 'q' 键退出循环。4. 释放资源: 循环结束后,释放摄像头资源并关闭所有OpenCV窗口。

注意事项

  • 此代码示例仅识别黑色矩形。 - 如果画面中存在其他黑色物体,代码可能会错误识别。 - 对于更复杂场景和更精确的识别,可能需要更复杂的图像处理技术,例如: - 使用颜色检测识别特定颜色的矩形。 - 使用机器学习模型训练更强大的矩形检测器。

希望本教程能帮助你在OpenCV项目中成功识别黑色矩形并获取其顶点坐标!

OpenCV摄像头识别黑色矩形:获取顶点坐标Python代码

原文地址: https://www.cveoy.top/t/topic/fxxu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录