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
相关产品推荐
相关产品推荐

