python - 简单拼接和 OpenCV 3.2.0 出错 - cv2.cpp:152: 错误:(-215) 数据通常应为 NULL!在函数 NumpyAllocator::allocate 中

标签 python opencv

我正在尝试使用 OpenCV 来拼接图像,但即使是最简单的代码,我也会收到错误 cv2.cpp:152: error: (-215) The data 通常应该为 NULL!在函数 NumpyAllocator::allocate

我在 Mac 上使用 python 2.7.10 测试了它,在 Windows 上使用 python 3.6.1 进行了测试

代码如下所示:

import cv2

cv2.ocl.setUseOpenCL(False)
stitcher = cv2.createStitcher(False)
foo = cv2.imread("image1.jpg")
bar = cv2.imread("image2.jpg")
result = stitcher.stitch((foo,bar))

根据谷歌搜索,有些人建议 cv2.ocl.setUseOpenCL(False) 解决了这个问题,但显然在我的情况下并没有:)

任何如何使其发挥作用的建议都值得赞赏:)

最佳答案

编辑 - 2018 年 8 月 15 日

此问题现已在 OpenCV 3.3 中得到修复。如果您尚未升级,请至少升级到此版本。请参阅问题页面末尾的评论:https://github.com/opencv/opencv/issues/6969 .

对于那些不使用 OpenCV 3.3 及以上版本的人,我将在下面留下之前的答案。


不幸的是,这是 OpenCV 3.x 中的一个错误,尚未修复。以下是 Github 上问题页面的链接:https://github.com/opencv/opencv/issues/6969

在页面上,破解此问题的一种方法是实际打开 modules/python/src2/cv2.cpp 源文件并删除 if 语句该错误中的第 152 行左右。该 if 语句是:

    if( data != 0 )
    {
        CV_Error(Error::StsAssert, "The data should normally be NULL!");
        // probably this is safe to do in such extreme case
        return stdAllocator->allocate(dims0, sizes, type, data, step, flags, usageFlags);
    }

问题页面上有人删除了整个 if 语句,然后重新编译了 OpenCV,这终于成功了。不幸的是,即使 OpenCL 被禁用,这也是唯一已知的解决方法。

请注意,此错误仅存在于 Python 接口(interface)中,因为在 Python 和 C++ 环境之间交互的源文件(即 cv2.cpp 文件)中抛出异常。您绝对可以让缝合器在 native C++ API 中工作,而不会引发此异常。

关于python - 简单拼接和 OpenCV 3.2.0 出错 - cv2.cpp:152: 错误:(-215) 数据通常应为 NULL!在函数 NumpyAllocator::allocate 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43002279/

相关文章:

python LZMA : Compressed data ended before the end-of-stream marker was reached

python - 如何在 Django 管理中删除面包屑

c++ - 无法使用 Openvino 中间表示文件转发()网络,但可以使用 ONNX 文件我正在制作 IR

c# - 如何使用 Emgu CV 检测图像中的箭头?

c++ - OpenCV 应用程序(不是库)链接错误

python - 我怎么能刮这个?

python - 关于 Diffie-Hellman key 交换

Python OOP __Add__ 矩阵在一起(循环问题)

python - ImportError : numpy. core.multiarray 在使用 mod_wsgi 时导入失败

使用 dlib 的 Python 裁剪人脸图像