我正在使用OpenCV 3.0.0和Python 3.4.3来处理一个非常大的RGB图像(10716279553,3).当我try 使用以下代码调整其大小时:

import cv2
image = cv2.resize(img, (0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)

我收到了一条错误信息:

cv2.错误:C:\opencv-3.0.0\source\modules\imgproc\src\imgwarp.cpp:3208:错误:(-215)ssize.面积()>函数cv::resize中的0

我确定图像数组中有图像内容,因为我可以将它们保存为jpg格式的小平铺.当我try 调整图像的一小部分大小时,没有问题,最终得到的是正确调整大小的图像.(取一个相当大的块(5000050000,3)仍然不起作用,但在(1000010000,3)块上会起作用)

是什么导致了这个问题?我该如何解决这个问题?

推荐答案

因此,问题来自modules\imgproc\src\imgwarp.cpp分之一的人:

CV_Assert( ssize.area() > 0 );

当要调整大小的图像的行和列的乘积大于2^31时,ssize.area()结果为负数.这似乎是OpenCV中的一个错误,希望在future 的版本中得到修复.一个临时修复方法是使用注释掉的这一行构建OpenCV.虽然不太理想,但它对我很有效.

我最近才发现,上面的内容只适用于宽度大于高度的图像.对于高度大于宽度的图像,以下行会导致错误:

CV_Assert( dsize.area() > 0 );

所以这也必须被注释掉.

Python-3.x相关问答推荐

是什么原因导致Pandas=2.1.4和Pandas=1.4.2之间Pandas DataFrame中从Float64到int32的连续列转换方式不同

如何使用regex将电话号码和姓名从文本字符串中分离出来

如何使用TensorFlow Keras子类化来构建和训练模型

如何定义部署用 Python 编写的 Firestore 第二代函数的区域/位置?

如何根据索引子列表对元素列表进行分组或批处理?

一起使用数据类和枚举

无法提出给定 for 循环的原因 (Python 3.11)

Pandas 在每组两个条件之间获得时间增量

位对的距离

在判断列表变量时如何判断特定列的值并分配加权整数值

使用 python-binance 时,heroku [regex._regex_core.error: bad escape \d at position 7] 出错

每个数据行中每个数据帧值的总和

具有 2 个输入的 python 3 map/lambda 方法

python 3.7 websockets的1006连接异常关闭错误

Python:遍历子列表

Python 异步调试示例

将 numpy.float64 列表快速转换为 Python 中的浮点数

python - 使用 matplotlib 和 boto 将绘图从内存上传到 s3

当默认 pip 为 pip2 时,升级 pip3 的正确格式是什么?

有效地判断一个元素是否在列表中至少出现 n 次