首先确保安装的opencv版本在3.0以上
import cv2 print(cv2.__version__)然后生成ArUco标记:生成了一个大小为200×200像素的ArUco图并保存为aruco.jpg,打印出来放到摄像头面前作为参考
标记检测:通过摄像头检测ArUco标记,并计算像素到实际厘米的比例。
测量其他物体:结合像素到厘米的比例,测量画面中其他物体的宽度和高度。
完整代码
import cv2 import numpy as np # 生成ArUco字典 aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_5X5_100) # 生成ArUco图 aruco_id = 50 aruco_size = 200 # 每个边的像素数 aruco_img = np.zeros((aruco_size, aruco_size), dtype=np.uint8) aruco_img = cv2.aruco.generateImageMarker(aruco_dict, aruco_id, aruco_size) # 保存ArUco图像 cv2.imwrite('aruco.jpg', aruco_img) # 显示生成的ArUco图 cv2.imshow('ArUco Marker', aruco_img) cv2.waitKey(0) cv2.destroyAllWindows() # 摄像头实时检测其他物体 def measure_object_with_aruco(): # 定义ArUco标记的真实边长(单位:cm) aruco_real_size = 5.0 # 假设真实尺寸为5 cm # 打开摄像头 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: print("无法读取摄像头画面") break # 转为灰度图 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 检测ArUco标记 corners, ids, rejected = cv2.aruco.detectMarkers(gray, aruco_dict) # 如果检测到ArUco标记 if ids is not None: cv2.aruco.drawDetectedMarkers(frame, corners, ids) # 假设只有一个标记,提取角点 for corner in corners: # 计算ArUco的像素宽度 aruco_pixel_size = np.linalg.norm(corner[0][0] - corner[0][1]) # 计算像素到厘米的比例 pixel_to_cm_ratio = aruco_real_size / aruco_pixel_size # 在画面中标注测量结果 cv2.putText(frame, f"Ratio: {pixel_to_cm_ratio:.2f} cm/pixel", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) # 检测其他物体 # 在实际场景中,这部分需要结合轮廓检测或物体识别算法 # 假设我们检测到一个矩形区域 x, y, w, h = 100, 100, 200, 100 # 示例:检测到的物体区域 object_width_cm = w * pixel_to_cm_ratio object_height_cm = h * pixel_to_cm_ratio cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.putText(frame, f"Width: {object_width_cm:.2f} cm", (x, y - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2) cv2.putText(frame, f"Height: {object_height_cm:.2f} cm", (x, y - 50), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2) # 显示检测结果 cv2.imshow('Frame', frame) # 按 'q' 键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头资源 cap.release() cv2.destroyAllWindows() # 调用函数开始检测 measure_object_with_aruco()
网友回复
有没有类似豆包pc端ai大模型编程代码块折叠右侧流式输出带预览的前后端代码?
nodejs有没有很快的目录爬虫和通配符文件查找库?
js如何流式输出ai的回答并折叠代码块,点击代码块右侧可预览代码?
ai大模型如何将文章转换成可视化一目了然的图片流程图图表?
大模型生成html版本的ui原型图和ppt演示文档的系统提示词怎么写?
rtsp视频直播流如何转换成websocket流在h5页面上观看?
为啥coze会开源工作流agent coze studio?
如何检测网页是通过收藏夹打开的?
python如何实现类似php的http动态脚本请求处理响应代码?
js如何实现类似php的http动态脚本请求处理响应代码?