OpenCV过滤图像红色时报错cv2.cvtColor(-215:Assertion failed)如何解决
报错根因
你遇到的cv2.error: (-215:Assertion failed)报错触发自cv2.cvtColor方法,本质是cv2.imread读取图片失败,返回了空值None,颜色空间转换接口拿到空输入后触发了内部断言校验失败。
修复步骤
- 第一步新增图片读取校验逻辑,同时修正红色HSV阈值不合理的问题,修改后完整代码如下:
import cv2 import numpy as np path = "C:\\Users\\MERYEM\\OneDrive\\Masaüstü\\scan\\Img_Data\\Chosen\\frame3802.jpg" image = cv2.imread(path) # 新增空值判断,避免空输入报错 if image is None: print(f"图片读取失败,请核对路径:{path}") exit() hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # OpenCV中HSV的H通道取值为0-179,红色分为0-10、170-179两段,需合并两个阈值区间的掩码 lower_red1 = np.array([0, 120, 70]) upper_red1 = np.array([10, 255, 255]) lower_red2 = np.array([170, 120, 70]) upper_red2 = np.array([179, 255, 255]) mask1 = cv2.inRange(hsv, lower_red1, upper_red1) mask2 = cv2.inRange(hsv, lower_red2, upper_red2) mask = mask1 + mask2 # 提取原图中的红色区域 red_result = cv2.bitwise_and(image, image, mask=mask) cv2.imshow('Original Image', image) cv2.imshow('Red Detection', red_result) cv2.waitKey(0) cv2.destroyAllWindows()
- 如果运行后提示图片读取失败,优先排查路径问题:可以尝试将目标图片放到和代码同目录,改用相对路径
path = "./frame3802.jpg"测试,确认路径中没有特殊字符、权限限制、目录拼写错误等问题。 - 可以根据实际图片的红色深浅,调整阈值中S(饱和度)、V(明度)的下限值,优化检测效果。
内容的提问来源于stack exchange,提问作者Meryem Çiftçi
相关产品推荐
相关产品推荐

