Python opencv2 (CV2) wrapper aby uzyskać Rozmiar obrazu?

Jak uzyskać Rozmiar obrazu w opakowaniu cv2 w Pythonie OpenCV (numpy). Czy jest na to poprawny sposób inny niż numpy.shape(). Jak mogę go uzyskać w tych wymiarach formatu: (szerokość, wysokość) lista?

Author: Joel G, 2013-09-30

3 answers

cv2 używa numpy do manipulowania obrazami, więc właściwym i najlepszym sposobem uzyskania rozmiaru obrazu jest użycie numpy.shape. Zakładając, że pracujesz z obrazami BGR, oto przykład:

>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
  600 800 3

Jeśli pracujesz z obrazami binarnymi, img będzie miał dwa wymiary, dlatego musisz zmienić kod na: height, width = img.shape

 231
Author: jabaldonedo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-13 20:01:43

Obawiam się, że nie ma "lepszego" sposobu, aby uzyskać ten rozmiar, jednak nie jest to zbyt wiele bólu.

Oczywiście twój kod powinien być bezpieczny zarówno dla obrazów binarnych / mono, jak i wielokanałowych, ale główne wymiary obrazu zawsze są na pierwszym miejscu w kształcie tablicy numpy. Jeśli zdecydujesz się na czytelność, lub nie chcesz tego wpisywać, możesz zawinąć ją w funkcję i nadać jej nazwę, którą lubisz, np. cv_size:

import numpy as np
import cv2

# ...

def cv_size(img):
    return tuple(img.shape[1::-1])

Jeśli jesteś na terminalu / ipython, możesz również wyrażaj to za pomocą lambdy:

>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)

Pisanie funkcji za pomocą def nie jest zabawne podczas interaktywnej pracy.

Edit

Początkowo myślałem, że użycie [:2] jest OK, ale kształt numpy to (height, width[, depth]) i potrzebujemy (width, height), jak np. cv2.resize oczekuje, więc - musimy użyć [1::-1]. Nawet mniej zapadające w pamięć niż [:2]. A kto w ogóle pamięta odwrotne krojenie?

 19
Author: Tomasz Gandor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-10 00:20:47
import cv2
img=cv2.imread('my_test.jpg')
img_info = img.shape
print("Image height :",img_info[0])
print("Image Width :", img_info[1])
print("Image channels :", img_info[2])

Ouput :- Tutaj wpisz opis obrazka

My_test.link jpg - - - > https://i.pinimg.com/originals/8b/ca/f5/8bcaf5e60433070b3210431e9d2a9cd9.jpg

 1
Author: Harish Kumawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-28 09:59:45