Python3环境下Jetson Nano对接LEPTON FLIR相机分辨率调整求助
问题根因
Lepton FLIR热像仪的底层驱动默认固定输出160×120分辨率,OpenCV的VideoCapture.set()指令无法直接修改摄像头输出参数,所以硬改采集参数不会生效,需要在拿到采集帧之后手动做缩放处理。
修改步骤
你只需要对现有代码做3处调整即可实现目标分辨率输出:
- 自定义目标分辨率,替换原有从摄像头读取宽高的逻辑
- 每次采集到帧之后先做缩放,再执行后续的ROI选点、推理、渲染逻辑
- 选择合适的插值算法保证热成像画面放大后的效果
具体代码修改
找到calculate_social_distancing函数,做如下调整:
def calculate_social_distancing(vid_path, net, output_dir, output_vid, ln1): count = 0 vs = cv2.VideoCapture(0) # -------------------- 新增修改开始 -------------------- # 定义目标分辨率 TARGET_W = 640 TARGET_H = 480 # 仅读取fps参数,宽高用自定义的目标值 fps = int(vs.get(cv2.CAP_PROP_FPS)) width = TARGET_W height = TARGET_H # -------------------- 新增修改结束 -------------------- # Set scale for birds eye view # Bird's eye view will only show ROI scale_w, scale_h = utills.get_scale(width, height) fourcc = cv2.VideoWriter_fourcc(*"XVID") output_movie = cv2.VideoWriter("./output_vid/distancing.avi", fourcc, fps, (width, height)) bird_movie = cv2.VideoWriter("./output_vid/bird_eye_view.avi", fourcc, fps, (int(width * scale_w), int(height * scale_h))) points = [] global image while True: (grabbed, frame) = vs.read() if not grabbed: print('here') break # -------------------- 新增修改开始 -------------------- # 对原生采集的160×120帧做缩放,INTER_CUBIC插值适合画面放大,追求性能可以换成INTER_LINEAR frame = cv2.resize(frame, (TARGET_W, TARGET_H), interpolation=cv2.INTER_CUBIC) # -------------------- 新增修改结束 -------------------- (H, W) = frame.shape[:2] # 后续原有逻辑完全不用修改 # first frame will be used to draw ROI and horizontal and vertical 180 cm distance(unit length in both directions) if count == 0: while True: image = frame cv2.imshow("image", image) cv2.waitKey(1) if len(mouse_pts) == 8: cv2.destroyWindow("image") break # ...... 剩余原有代码保持不变即可
性能优化建议
如果运行时出现卡顿,可做如下调整:
- 将缩放的插值算法从
cv2.INTER_CUBIC换成cv2.INTER_LINEAR,速度提升30%以上,热成像画面损失极小 - 若你使用的是Jetson Nano定制版OpenCV,可启用GStreamer后端采集,配合硬件加速缩放进一步降低CPU占用
内容的提问来源于stack exchange,提问作者Abdussalam Elhanashy
相关产品推荐
相关产品推荐

