Python OpenCV执行cvtColor报错(-215:Assertion failed)问题求助
异常D盘路径说明
报错中出现的D:\a\opencv-路径是OpenCV官方预编译包在构建阶段的服务器路径,和你本地设备的磁盘配置无关,属于编译时内置的日志信息,不属于异常问题,无需额外处理。
报错核心原因
(-215:Assertion failed) _step >= minstep 断言错误的本质是传入cv.cvtColor的 numpy 数组内存布局不符合OpenCV的Mat结构要求,结合你的代码场景具体触发原因如下:
- pyautogui的
screenshot返回PIL图像,转换为numpy数组时,小尺寸图像(比如你测试用的1*1分辨率)会生成非连续内存步长的数组,OpenCV无法直接解析这类数组 - 你当前使用的4.5.4-dev是OpenCV开发测试版本,本身存在较多兼容性bug,对边缘场景的输入容错性更低
解决方法
你可以任选以下任意一种方案解决问题:
- 强制将numpy数组转为连续内存布局:在
image = np.array(image)代码后新增一行image = np.ascontiguousarray(image),即可适配OpenCV的格式要求 - 更换稳定版OpenCV依赖:卸载当前开发版opencv-python,安装正式稳定版本,执行以下命令即可:
pipenv uninstall opencv-pythonpipenv install opencv-python==4.5.5.62 - 小尺寸图像特殊处理:如果仅需处理极小尺寸的截图,可直接用numpy切片交换通道,不需要调用OpenCV的cvtColor接口:
image = image[..., [2,1,0]]
修复后完整代码示例
import cv2 as cv import numpy as np import pyautogui as pg def make_screenshot(x=0, y=0, x_length=1920, y_length=1080, debug=False): image = pg.screenshot(region=(x, y, x_length, y_length)) image = np.array(image) # 新增行:强制转换为连续内存数组 image = np.ascontiguousarray(image) image = cv.cvtColor(image, cv.COLOR_RGB2BGR) if debug: cv.imshow('test', image) cv.waitKey() return image print(make_screenshot(0, 0, 1, 1, False))
内容的提问来源于stack exchange,提问作者nanobot
相关产品推荐
相关产品推荐

