【发布时间】:2023-03-23 23:35:01
【问题描述】:
我正在尝试让 python-opencv 运行,但我总是收到此错误:
image = cv.cvtColor(image, cv.COLOR_RGB2BGR)
cv2.error: OpenCV(4.5.4-dev) D:\a\opencv-python\opencv-python\opencv\modules\core\src\matrix.cpp:466: error: (-215:Assertion failed) _step >= minstep in function 'cv::Mat::Mat'
这个路径部分真的很奇怪 "D:\a\opencv-" 我什至没有 D: 驱动器。
这是我的代码(Windows 10、python 3.8、pycharm、pipenv)
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 = cv.cvtColor(image, cv.COLOR_RGB2BGR)
if debug:
cv.imshow('test', image)
cv.waitKey()
return image
print(make_screenshot(0, 0, 1, 1, False))
已检查但未成功:
error: (-215:Assertion failed) _step >= minstep in function 'cv::Mat::Mat'
error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize' OpenCV
cv2.error:(-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
【问题讨论】:
-
它在错误消息中报告的路径是基于编译库的机器,它与您的计算机无关(除非您自己构建二进制文件)。不知道你从哪里得到它,但
4.5.4-dev这个名字表明它是某种正在进行的开发构建,所以你有点靠自己。错误消息仍然很有趣,因为代码看起来很合理。 -
我通过
pipenv install opencv-python安装了它,我将尝试指定一些较旧的“稳定”版本并重试。我认为您可能就在这里,因为之前完全相同的代码对我有用。我真的应该开始在我的 pipfile 中定义固定版本而不是 '*' -
.copy()numpy 数组。 OpenCV 抱怨数据有奇怪的步伐或其他东西——不要尝试任何“较旧的稳定”版本。在pypi.org/project/opencv-python 获得最新版本,您可以通过pip install opencv-python获得(不确定 pipenv 是做什么的) -
pipenv 是 pip 和 venv 的组合。
-
@ChristophRackwitz
numpy.array默认复制。不知道为什么这会产生 OpenCV 无法理解的东西(我知道将 numpy 数组映射到cv::Mat的细微差别)。我看到的与显式副本的唯一区别是此函数保持顺序(C 或 Fortran)相同,而ndarray.copy将其强制为 C 顺序(可能值得尝试覆盖该行为)。但是,为什么 PIL 会生成一个 Fortran 顺序数组,而这种方法已经使用了很长时间?我错过了什么吗?
标签: python python-3.x opencv opencv-python