use*_*217 24 opencv image image-processing python-3.x opencv3.0
我正在使用OpenCV 3.0.0和Python 3.4.3来处理非常大的RGB图像(107162,79553,3).我正在尝试使用以下代码调整它的大小:
import cv2
image = cv2.resize(img, (0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
Run Code Online (Sandbox Code Playgroud)
我有这个错误消息:
"cv2.error:C:\ opencv-3.0.0\source\modules\imgproc\src\imgwarp.cpp:3208:错误:(-215)ssize.area()> 0 in function cv :: resize"
我确定图像阵列中有图像内容,因为我可以将它们保存为jpg格式的小图块.当我尝试仅调整图像的一小部分时,没有问题,我最终得到了正确调整大小的图像.(拿一个相当大的块(50000,50000,3)仍然无法工作,但它可以工作在(10000,10000,3)块)
我想知道是什么原因导致这个问题以及如何解决这个问题?
谢谢
use*_*217 24
事实证明问题来自于以下一行modules\imgproc\src\imgwarp.cpp:
CV_Assert( ssize.area() > 0 );
Run Code Online (Sandbox Code Playgroud)
当要调整大小的图像的行和列的乘积大于2 ^ 31时,ssize.area()导致负数.这似乎是OpenCV中的一个错误,希望将来的版本中修复.临时解决方法是使用此行注释掉构建OpenCV.虽然不理想,但它对我有用.
我刚刚发现上述内容仅适用于宽度大于高度的图像.对于高度大于宽度的图像,它是导致错误的以下行:
CV_Assert( dsize.area() > 0 );
Run Code Online (Sandbox Code Playgroud)
所以这也必须被注释掉.
事实证明,这个错误实际上是在说实话 - 我试图调整Null图像的大小,这通常是视频文件的"最后一帧",所以断言是有效的.
现在我在尝试调整大小操作之前还有一个额外的步骤,即自己做断言:
def getSizedFrame(width, height):
"""Function to return an image with the size I want"""
s, img = self.cam.read()
# Only process valid image frames
if s:
img = cv2.resize(img, (width, height), interpolation = cv2.INTER_AREA)
return s, img
Run Code Online (Sandbox Code Playgroud)
现在我没有看到错误.
| 归档时间: |
|
| 查看次数: |
75084 次 |
| 最近记录: |