Estoy usando OpenCV 3.0.0 y Python 3.4.3 para procesar una gran imagen RGB (107162,79553,3). Mientras yo estoy tratando de cambiar su tamaño utilizando el siguiente código:

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

Tuve este mensaje de error acerca :

«cv2.error: C:\opencv-3.0.0\source\modules\imgproc\src\imgwarp.cpp:3208: error: (-215) ssize.área() > 0 en función de cv::cambiar el tamaño de»

Estoy seguro de que es el contenido de la imagen en la imagen de la matriz porque puedo guardar en pequeños azulejos en formato jpg. Cuando intento cambiar el tamaño de una pequeña parte de la imagen, no hay problema, y termino con correctamente la imagen redimensionada. (Tomando un lugar gran parte (50000,50000,3) todavía no funciona, pero funciona en un (10000,10000,3) fragmento)

Me pregunto lo que podría causar este problema y cómo puedo solucionar esto?

Gracias

  • adivinar: integer range es de +/- 2.147.483.647 mientras cols x filas ist 8.525.058.586 en su ejemplo.Así que PROBABLEMENTE hay un desbordamiento de entero dentro de cv::cambio de tamaño. Usted podría probar esto por pruebas de imagen tamaños alrededor cols x filas == 2.147.483.647
  • Hey Micka, tienes razón !! Funciona en (46340,46340,3), pero no (46341,46341,3). ¿Que significa el cambio de int a int64 debe resolver el problema?
  • No sé dónde en el interior de cv::cambiar el tamaño del área es calculada. Yo creo que hay que tener una mirada en opencv cambiar el tamaño de fuente de código de…
  • Donde puedo encontrar este archivo en macos, no encontré ningún archivo que tiene un nombre similar ?
InformationsquelleAutor user3667217 | 2015-08-13

12 Comentarios

  1. 23

    Así resulta que el problema viene de una línea en modules\imgproc\src\imgwarp.cpp:

    CV_Assert( ssize.area() > 0 );

    Cuando el producto de filas y columnas de la imagen cambiar de tamaño es mayor que 2^31, ssize.área() el resultado es un número negativo. Esto parece ser un error en OpenCV y espero que será corregido en la próxima versión. Una solución temporal es la construcción de OpenCV con esta línea de comentarios. Aunque no es ideal, a mí me funciona.

    Y hace poco me enteré de que la anterior se aplica sólo a la imagen, cuyo ancho es mayor que la altura. Para las imágenes con altura mayor que la anchura, es la siguiente línea que causa el error:

    CV_Assert( dsize.area() > 0 );

    Por lo que este tiene que ser un comentario así.

    • ¿Cómo se puede cambiar esta línea de código? Dónde está el archivo que se encuentran?
    • Sí, este es el gran pero, ¿dónde podemos encontrar el archivo
    • Fue una solución para arreglar esta línea de código de puesto/encontrado?
    • Por favor decirme donde está el archivo correspondiente encuentra.
    • Sólo la búsqueda ‘imgwrap.cpp’ en el directorio principal ‘/’ y encontrará el archivo!
  2. 8

    Resulta para mí este error en realidad estaba diciendo la verdad – yo estaba tratando de cambiar el tamaño de un valor Nulo de la imagen, que generalmente era el «último» de la estructura de un archivo de vídeo, por lo que la afirmación es válida.

    Ahora tengo que realizar un paso adicional antes de intentar la operación de cambio de tamaño, que es hacer la afirmación de mí mismo:

    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

    Ahora no veo el error.

    • No creo que este es el caso general. Este error ocurre con las imágenes válidas, debido a la OpenCV error.
    • Este es el primer éxito en Google y esto debe ser upvoted!! Revise su imgs antes de empezar a comentar el openCV código, tuve exactamente el mismo problema al analizar decenas de imágenes en el preprocesamiento.
  3. 2

    Sé que esto es un hilo muy antiguo, pero yo tenía el mismo problema que era debido espacios en el nombre de las imágenes.

    por ejemplo,

    Nombre de la imagen: «hola o.jpg»

    extrañamente, mediante la eliminación de los espacios de la función funcionado bien.

    Nombre de la imagen: «hello_o.jpg»

  4. 2

    También prestar atención al tipo de objeto de su numpy matriz, la conversión de uso de .astype('uint8') resuelto el problema para mí.

  5. 1

    Para mí el siguiente trabajo-alrededor de trabajado:

    • dividir la matriz en pequeñas sub matrices
    • cambiar el tamaño de la sub matrices
    • combinación de las sub matrices de nuevo

    Aquí el código:

    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
    • No trabajo para mí, me da el mismo error! «error: (-215) ssize.área() > 0 en el tamaño de la función». Nota: he tenido que modificar el código de ur ya que la indexación de valor debe ser un entero. «El uso de // en lugar de / «.
  6. 1

    Estoy teniendo OpenCV versión 3.4.3 en MacOS.
    Yo estaba recibiendo el mismo error que el anterior.

    He cambiado mi código de

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

    a

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

    Ahora su trabajo bien para mí.

  7. 1

    Este tipo de error también se lleva a cabo porque el tamaño es incapaz de obtener la imagen en simple
    el directorio de la imagen puede estar equivocado.En mi caso, yo a la izquierda de la barra diagonal durante proporcionar la ubicación del archivo y este error tuvo lugar después de poner la barra problema fue resuelto.

  8. 0

    Resulta que yo tenía una .archivo csv al final de la carpeta de la que estaba leyendo todas las imágenes.
    Una vez que he eliminado funcionó bien

    Asegurarse de que todas las imágenes y que no tenga cualquier otro tipo de archivo

  9. 0

    En mi caso hice un mal modificación en la imagen.

    Yo era capaz de encontrar el problema de la comprobación de la forma de la imagen.

    print img.shape
  10. 0

    Yo estaba trabajando con 3 archivos: La secuencia de comandos de python, la imagen y el modelo de aprendizaje.

    Todo funcionaba cuando me mudé estos 3 archivos en su propia carpeta en lugar de en el directorio con el resto de secuencias de comandos de python.

  11. 0

    Manualmente, puede colocar una marca de verificación en el código. Como este –

    
        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)
    `
  12. 0

    Tuve el mismo error. Cambio de tamaño de las imágenes resuelto el problema. Sin embargo, he utilizado las herramientas en línea para cambiar el tamaño de las imágenes debido a que el uso de la almohada para cambiar el tamaño de ellos no se soluciona mi problema.

Dejar respuesta

Please enter your comment!
Please enter your name here