La diferencia entre forma en numpy y forma en opencv

En el proceso de usar opencv y numpy, es inevitable que necesite ajustar el tamaño de la imagen. Las operaciones como cambiar el tamaño y obtener la forma son más comunes, pero en el proceso de usar opencv y numpy para cambiar el tamaño de la imagen, Siempre encontramos algo extraño El problema me preocupa desde hace mucho tiempo, regístralo hoy, por si lo vuelves a repetir, ¡y recuerda también a los zapatos de niños que tienen el mismo problema!
Echemos un vistazo a qué forma tiene después de leer una imagen a través de opencv: leamos una imagen con
un ancho de 858 y una longitud de 600:

>>> im = cv2.imread("XXX")
>>> im.shape
(600, 858, 3)
>>>

Obviamente, la composición de la forma es así: (altura, ancho, número de canales)
Echemos un vistazo a numpy. Muchos métodos en numpy tienen el parámetro de forma. Cuando se usa numpy para crear una imagen, siempre es fácil cambiar el La forma de opencv y numpy se confunde, echemos un vistazo a numpy para crear una matriz bidimensional:

>>> a = np.zeros((3,5))
>>> a
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
>>>

Obviamente, pasamos (3,5) como los parámetros de forma, y ​​el resultado muestra que 3 es el número de filas y 5 es el número de columnas, es decir, 3 es la altura y 5 es el ancho. Entonces, cuando que utilizamos numpy para crear una imagen, la forma es (altura, anchura), si hay canales, es (altura, ancho, número de canales) .
resulta forma de que numpy [0: 2] y la forma [0 : 2] de la imagen leída por imread en opencv Es lo mismo, es decir (alto, ancho),
pero cuando el parámetro de tamaño se pasa al método opencv, ¿cómo es?
Todavía use la imagen que acaba de leer como ejemplo (altura 600, ancho 858),

>>> reim = cv2.resize(im,(200,400))
>>> cv2.imshow("resize",reim)
>>> cv2.waitKey(3000)

Inserte la descripción de la imagen aquí
Obviamente, el parámetro de tamaño que pasamos se interpreta como 200 como ancho y 400 como alto, es decir, el tamaño es (ancho, alto) , que es diferente del orden de los datos en la forma que vimos antes. De hecho, cuando nos referimos al tamaño de la interfaz o imagen, la disposición de los datos en el tamaño es generalmente (ancho, alto), por lo que cuando queramos usar el tamaño de algunas imágenes o controles, preste atención al ¡El orden de los datos en el tamaño y la forma es diferente!

Supongo que te gusta

Origin blog.csdn.net/Miha_Singh/article/details/88960766
Recomendado
Clasificación