[python] 이미지 크기를 얻으려면 Python OpenCV2 (cv2) 래퍼?

cv2Python OpenCV (numpy)의 래퍼에서 이미지 크기를 얻는 방법 . 이외 다른 작업을 수행하는 올바른 방법이 있나요 numpy.shape(). (너비, 높이) 목록 형식으로 어떻게 가져올 수 있습니까?



답변

cv2numpy이미지를 조작 하는 데 사용 되므로 이미지 크기를 얻는 적절하고 가장 좋은 방법은 numpy.shape. BGR 이미지로 작업한다고 가정하면 다음과 같은 예가 있습니다.

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

이진 이미지로 작업하는 경우 img2 차원이 있으므로 코드를 다음과 같이 변경해야합니다.height, width = img.shape


답변

이 크기를 얻을 수있는 “더 나은”방법은 없지만 그다지 고통 스럽지는 않습니다.

물론 코드는 이진 / 모노 이미지와 다중 채널 이미지 모두에 대해 안전해야하지만 이미지의 주요 크기는 항상 numpy 배열의 모양에서 가장 먼저옵니다. 가독성을 선택하거나 이것을 입력하는 것을 귀찮게하고 싶지 않다면 함수로 감싸고 원하는 이름을 지정할 수 있습니다. 예 cv_size:

import numpy as np
import cv2

# ...

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

터미널 / ipython을 사용하는 경우 람다로 표현할 수도 있습니다.

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

def대화식으로 작업하는 동안 함수를 작성하는 것은 재미가 없습니다.

편집하다

원래는 사용하는 [:2]것이 괜찮다고 생각 했지만 numpy 모양은 (height, width[, depth])이고 (width, height)예를 들어 cv2.resize예상 대로를 필요로 하므로을 사용해야합니다 [1::-1]. 보다 덜 기억에 남습니다 [:2]. 어쨌든 리버스 슬라이싱을 기억하는 사람은 누구입니까?


답변