【问题标题】:Python OpenCV Error: (-215:Assertion failed) _step >= minstep in function 'cv::Mat::Mat'Python OpenCV 错误:(-215:断言失败)_step >= minstep in function 'cv::Mat::Mat'
【发布时间】: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


【解决方案1】:

需要转成数组吗?

也许也可以使用 .imread() 函数。

image = cv2.imread(image)

【讨论】:

  • 我不想从文件中读取图像,如果我只是截屏并将其保存在内存中。我仍然尝试过,它会引发同样的错误。 Do you need to convert it to an array? 是的,因为要在 cv 中使用由枕头记录的图像,它必须正确格式化,而 np.array 和 cv.COLOR_RGB2BGR 正是这样做的。
猜你喜欢
  • 1970-01-01
  • 2020-08-21
  • 2022-01-10
  • 2016-08-04
  • 2020-12-13
  • 2020-10-23
  • 2017-12-24
  • 1970-01-01
相关资源
最近更新 更多