使用"错误:(-215)ssize.area()>大图像上的OpenCV调整大小失败。 0在函数cv :: resize"

时间:2015-08-13 19:00:22

标签: image opencv python-3.x image-processing 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)

我收到了这条错误消息:
" cv2.error:C:\ opencv-3.0.0 \ source \ modules \ imgproc \ src \ imgwarp.cpp:3208:错误:(-215)ssize.area()>函数cv :: resize"

中的0

我确定图像阵列中有图像内容,因为我可以将它们保存为jpg格式的小图块。当我尝试仅调整图像的一小部分时,没有问题,我最终得到了正确调整大小的图像。 (占据相当大的一块(50000,50000,3)仍然无法工作,但它可以用于(10000,10000,3)大块)

我想知道是什么原因造成这个问题以及如何解决这个问题?

由于

12 个答案:

答案 0 :(得分:7)

事实证明,这个错误实际上是说实话 - 我试图调整Null图像的大小,这通常是最后一个'视频文件的框架,因此断言有效。

现在我在尝试调整大小操作之前还有一个额外的步骤,就是自己做断言:

list comprehension

现在我没有看到错误。

答案 1 :(得分:2)

我知道这是一个非常古老的线程,但我遇到的问题是图像名称中的空格。

e.g。

  

图片名称:" hello o.jpg"

很奇怪,通过删除空格,函数工作得很好。

  

图片名称:" hello_o.jpg"

答案 2 :(得分:1)

对我来说,以下解决方法有效:

  • 将数组拆分为更小的子数组
  • 调整子数组的大小
  • 再次合并子数组

这里是代码:

def split_up_resize(arr, res):
    """
    function which resizes large array (direct resize yields error (addedtypo))
    """

    # compute destination resolution for subarrays
    res_1 = (res[0], res[1]/2)
    res_2 = (res[0], res[1] - res[1]/2)

    # get sub-arrays
    arr_1 = arr[0 : len(arr)/2]
    arr_2 = arr[len(arr)/2 :]

    # resize sub arrays
    arr_1 = cv2.resize(arr_1, res_1, interpolation = cv2.INTER_LINEAR)
    arr_2 = cv2.resize(arr_2, res_2, interpolation = cv2.INTER_LINEAR)

    # init resized array
    arr = np.zeros((res[1], res[0]))

    # merge resized sub arrays
    arr[0 : len(arr)/2] = arr_1
    arr[len(arr)/2 :] = arr_2

    return arr

答案 3 :(得分:1)

还要注意numpy数组的对象类型,使用.astype('uint8')对其进行转换为我解决了该问题。

答案 4 :(得分:1)

也会发生这种类型的错误,因为调整大小无法简单地获取图像 图像目录可能是错误的。在我的情况下,我在提供文件位置时留了正斜杠,并且在解决斜杠问题后发生了此错误。

答案 5 :(得分:0)

原来我在文件夹的末尾有一个.csv文件,我正在阅读所有图像。 一旦我删除它工作正常

确保它是所有图片,并且您没有任何其他类型的文件

答案 6 :(得分:0)

就我而言,我对图片进行了错误的修改。

我能够找到检查图像形状的问题。

print img.shape

答案 7 :(得分:0)

我在MacOS上具有OpenCV版本3.4.3。 我遇到了与上述相同的错误。

我从更改了代码

LIMIT

frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)   

现在对我来说很好。

答案 8 :(得分:0)

我正在处理3个文件:python脚本,图像和训练有素的模型。

我将这3个文件移到它们自己的文件夹而不是其他python脚本的目录中后,一切正常。

答案 9 :(得分:0)

您可以手动在代码中进行检查。像这样-


    if result != []:
        for face in result:
            bounding_box = face['box']
            x, y, w, h = bounding_box[0], bounding_box[1], bounding_box[2], bounding_box[3]
            rect_face = cv2.rectangle(frame, (x, y), (x+w, y+h), (46, 204, 113), 2)
            face = rgb[y:y+h, x:x+w]

            #CHECK FACE SIZE (EXIST OR NOT)
            if face.shape[0]*face.shape[1] > 0:

                predicted_name, class_probability = face_recognition(face)

                print("Result: ", predicted_name, class_probability)
`

答案 10 :(得分:0)

我有同样的错误。调整图像大小可以解决此问题。但是,我使用在线工具调整图像大小,因为使用枕头调整图像大小无法解决我的问题。

答案 11 :(得分:0)

就我而言,

image = cv2.imread(filepath)
final_img = cv2.resize(image, size_img)

文件路径不正确,在这种情况下cv2.imshow没有给出任何错误,但是由于路径错误cv2.resize给了我错误。