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

OpenCV4.1.2运行稠密光流代码触发cvtColor报错-215如何解决

报错根因

这个!_src.empty()报错是cv2.cvtColor接收的输入帧为空导致的,触发场景有两个:

  1. 初始化VideoCapture时未能成功打开animal.avi文件,读取到的帧都是空值
  2. 视频读取到末尾后,cap.read()返回的帧为空,代码没有做合法性校验直接传入了cvtColor处理
具体修复步骤
  • 首先确认animal.avi文件路径正确:如果在Colab环境运行,需先将视频文件上传到当前工作目录,或挂载Google Drive后填写文件的绝对路径
  • 补充所有帧读取的合法性校验,读取失败时直接终止流程避免操作空帧
修复后完整代码
import cv2
import numpy as np
from google.colab.patches import cv2_imshow

# 打开视频文件
cap = cv2.VideoCapture("animal.avi")
# 新增:判断视频是否成功打开
if not cap.isOpened():
    print("视频文件打开失败,请检查路径是否正确")
    exit()

# 读取第一帧并校验
ret, frame1 = cap.read()
if not ret:
    print("第一帧读取失败,视频文件可能损坏")
    cap.release()
    exit()
prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1)
hsv[...,1] = 255

while(1):
    ret, frame2 = cap.read()
    # 新增:读取到视频末尾直接跳出循环
    if not ret:
        break
    next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)

    flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

    mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
    hsv[...,0] = ang*180/np.pi/2
    hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)
    rgb = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)

    cv2_imshow(rgb)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
    elif k == ord('s'):
        cv2.imwrite('opticalfb.png',frame2)
        cv2.imwrite('opticalhsv.png',rgb)
    prvs = next

cap.release()
cv2.destroyAllWindows()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:04