OpenCV摄像头识别黑色矩形:获取顶点坐标Python代码
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()
代码解析
- 导入库: 首先,导入必要的库:
cv2用于OpenCV图像处理,numpy用于数值计算。2.find_black_rectangle函数: - 将输入图像转换为灰度图。 - 使用阈值处理将黑色部分与其他部分分离。 - 查找图像中的轮廓。 - 遍历每个轮廓: - 使用cv2.approxPolyDP函数将轮廓近似为多边形。 - 如果多边形有4个顶点并且是凸的,则认为它是矩形,并返回其顶点坐标。3. 主循环: - 打开默认摄像头 (cv2.VideoCapture(0)). - 循环读取摄像头画面帧。 - 调用find_black_rectangle函数查找黑色矩形。 - 如果找到矩形: - 在画面帧上绘制矩形轮廓。 - 在矩形的每个顶点上绘制圆圈。 - 显示处理后的画面帧。 - 按下 'q' 键退出循环。4. 释放资源: 循环结束后,释放摄像头资源并关闭所有OpenCV窗口。
注意事项
- 此代码示例仅识别黑色矩形。 - 如果画面中存在其他黑色物体,代码可能会错误识别。 - 对于更复杂场景和更精确的识别,可能需要更复杂的图像处理技术,例如: - 使用颜色检测识别特定颜色的矩形。 - 使用机器学习模型训练更强大的矩形检测器。
希望本教程能帮助你在OpenCV项目中成功识别黑色矩形并获取其顶点坐标!
原文地址: https://www.cveoy.top/t/topic/fxxu 著作权归作者所有。请勿转载和采集!