import cv2 # 创建跟踪器对象 tracker = cv2.TrackerCSRT_create() # 打开视频文件 video = cv2.VideoCapture('plane.mp4') # 读取第一帧 ok, frame = video.read() # 选择要跟踪的目标区域 bbox = cv2.selectROI(frame, False) # 初始化跟踪器 ok = tracker.init(frame, bbox) while True: # 读取当前帧 ok, frame = video.read() if not ok: break # 跟踪目标 ok, bbox = tracker.update(frame) # 如果跟踪成功,绘制跟踪框和中心点 if ok: # 获取跟踪框坐标 x, y, w, h = [int(i) for i in bbox] # 绘制跟踪框 cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # 计算中心点坐标 center_x = x + w/2 center_y = y + h/2 # 绘制中心点 cv2.circle(frame, (int(center_x), int(center_y)), 5, (0, 0, 255), -1) # 显示中心点坐标 text = 'Center: ({:.1f}, {:.1f})'.format(center_x, center_y) cv2.putText(frame, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2) # 显示视频帧 cv2.imshow('Airplane Tracking', frame) # 等待按下 ESC 键退出 if cv2.waitKey(1) == 27: break # 释放资源 video.release() cv2.destroyAllWindows()在这段代码中添加实时获取机头的坐标画出坐标并显示数值的Python程序
时间: 2024-04-28 16:20:07 浏览: 118
好的,我们可以使用特征点检测算法来实现获取机头坐标。在跟踪目标后,可以使用SIFT、SURF、ORB等算法来检测目标的特征点,并绘制出特征点的位置。代码如下:
```
import cv2
# 创建跟踪器对象
tracker = cv2.TrackerCSRT_create()
# 打开视频文件
video = cv2.VideoCapture('plane.mp4')
# 读取第一帧
ok, frame = video.read()
# 选择要跟踪的目标区域
bbox = cv2.selectROI(frame, False)
# 初始化跟踪器
ok = tracker.init(frame, bbox)
while True:
# 读取当前帧
ok, frame = video.read()
if not ok:
break
# 跟踪目标
ok, bbox = tracker.update(frame)
# 如果跟踪成功,绘制跟踪框和中心点
if ok:
# 获取跟踪框坐标
x, y, w, h = [int(i) for i in bbox]
# 绘制跟踪框
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 计算中心点坐标
center_x = x + w/2
center_y = y + h/2
# 绘制中心点
cv2.circle(frame, (int(center_x), int(center_y)), 5, (0, 0, 255), -1)
# 显示中心点坐标
text = 'Center: ({:.1f}, {:.1f})'.format(center_x, center_y)
cv2.putText(frame, text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)
# 特征点检测
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
detector = cv2.ORB_create()
keypoints = detector.detect(gray, None)
for kp in keypoints:
x, y = kp.pt
cv2.circle(frame, (int(x), int(y)), 3, (255, 0, 0), -1)
cv2.putText(frame, 'Head', (int(x)-10, int(y)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
cv2.putText(frame, '({:.1f}, {:.1f})'.format(x, y), (int(x)-50, int(y)-30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)
# 显示视频帧
cv2.imshow('Airplane Tracking', frame)
# 等待按下 ESC 键退出
if cv2.waitKey(1) == 27:
break
# 释放资源
video.release()
cv2.destroyAllWindows()
```
在这段代码中,我们使用ORB算法来检测特征点,并在特征点位置上绘制红色的圆形和文字。同时,在文字中显示特征点的坐标值。你可以根据需要选择其他的特征点检测算法来实现相同的功能。
阅读全文