You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

鱼眼相机实时视频去畸变报错:'NoneType'无shape属性

解决鱼眼相机实时流去畸变时的AttributeError问题

错误原因

报错AttributeError: 'NoneType' object has no attribute 'shape'是因为cap.read()未能成功读取视频帧,返回的frame为None。常见触发场景:

  • 视频文件路径填写错误
  • 摄像头设备无法被OpenCV识别
  • 视频流已播放完毕

解决方案

1. 验证视频源并添加帧读取检查

在循环中先判断帧读取状态,若读取失败直接退出循环,避免后续代码报错:

while True:
    success, frame = cap.read()
    # 检查是否成功读取帧
    if not success:
        break

2. 优化代码结构(提升运行效率)

将固定的相机校准参数、去畸变映射表移到循环外部,避免每次循环重复计算:

修改后的完整代码

import cv2
import numpy as np

# 初始化视频捕获:替换为正确的视频路径或摄像头索引(如0代表默认摄像头)
cap = cv2.VideoCapture('正确的视频路径或设备索引')

# 提前检查视频捕获是否成功打开
if not cap.isOpened():
    print("无法打开视频源")
    exit()

# 获取视频属性
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
fps = cap.get(cv2.CAP_PROP_FPS)

# 初始化视频写入器
fourcc = cv2.VideoWriter_fourcc(*'XVID')
output = cv2.VideoWriter('output.mp4', fourcc, fps, (frame_width, frame_height))

# 相机校准参数(移到循环外,避免重复定义)
DIM = (1280, 720)
K = np.array([[378.68613029205295, 0.0, 631.5070934616149], 
              [0.0, 379.1372862000342, 353.49063700941866], 
              [0.0, 0.0, 1.0]])
D = np.array([[-0.044342379001557394], 
              [0.07719525629446446], 
              [-0.07364775294823307], 
              [0.023329834056879786]])

# 预计算去畸变映射表(仅需计算一次)
map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM, cv2.CV_16SC2)

while True:
    success, frame = cap.read()
    if not success:
        break  # 读取失败或视频结束时退出循环

    # 执行去畸变
    new_frame = cv2.remap(frame, map1, map2, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT)
    
    # 写入输出视频
    output.write(new_frame)
    
    # 按q键手动退出
    if cv2.waitKey(20) == ord('q'):
        break

# 释放资源
cap.release()
output.release()
cv2.destroyAllWindows()

额外注意事项

  • 若使用摄像头,确保设备未被其他程序占用
  • 视频写入时,输出文件的尺寸需与去畸变后的帧尺寸匹配(此处DIM为1280x720,若原视频尺寸不同,需调整写入器的尺寸参数)

内容的提问来源于stack exchange,提问作者Rune619

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:26:03