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

Python调用cv2.cvtColor报错:缺少必需参数src问题排查

解决cv2.cvtColor()缺少'src'参数的错误

错误原因

你遇到的cv2.error: (-5:Bad argument)错误,直接原因是调用cv2.cvtColor()时参数传递错误。

看你代码里的这行:

frame_bw = cv2.cvtColor(frame = cv2.COLOR_BGR2GRAY)

这里你错误地把转换码cv2.COLOR_BGR2GRAY赋值给了frame参数,完全漏掉了第一个必需的src参数(要转换的彩色图像)。cv2.cvtColor()的正确语法是:

cv2.cvtColor(src, code[, dst[, dstCn]])

第一个参数必须是待转换的图像矩阵,第二个是颜色空间转换码。

修正代码

把错误的那行改成:

frame_bw = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

额外优化建议

另外,你的代码里有一处参数设置错误:

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 480)

两次都是设置宽度,第二次应该是设置高度CAP_PROP_FRAME_HEIGHT:

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

完整修正后的核心代码片段

while True:
    _, frame = cap.read()
    frame = imutils.resize(frame, width=500)

    if alarm_mode:
        # 修正后的cvtColor调用
        frame_bw = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  
        frame_bw = cv2.GaussianBlur(frame_bw, (5, 5), 0)

        difference = cv2.absdiff(frame_bw, start_frame)
        threshold = cv2.threshold(difference, 25, 255, cv2.THRESH_BINARY)[1]
        start_frame = frame_bw

        if threshold.sum() > 300:
            alarm_counter +=1
        else:
            if alarm_counter > 0:
                alarm_counter -=1
        
        cv2.imshow("Cam", threshold)
    else:
        cv2.imshow("Cam", frame)

    # 后续逻辑不变...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:16:06