我正在尝试使用 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/