cv2
Python OpenCV (numpy)의 래퍼에서 이미지 크기를 얻는 방법 . 이외 다른 작업을 수행하는 올바른 방법이 있나요 numpy.shape()
. (너비, 높이) 목록 형식으로 어떻게 가져올 수 있습니까?
답변:
cv2
numpy
이미지를 조작 하는 데 사용 되므로 이미지 크기를 얻는 적절하고 가장 좋은 방법은 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
이진 이미지로 작업하는 경우 img
2 차원이 있으므로 코드를 다음과 같이 변경해야합니다.height, width = img.shape
h, w = img.shape[:2]
. 특히 OP는 깊이에 관심이 없기 때문입니다. (나도 마찬가지였다). 자세한 내용은 내 대답을 참조하십시오.
이 크기를 얻을 수있는 "더 나은"방법은 없지만 그다지 고통 스럽지는 않습니다.
물론 코드는 이진 / 모노 이미지와 다중 채널 이미지 모두에 대해 안전해야하지만 이미지의 주요 크기는 항상 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]
. 어쨌든 리버스 슬라이싱을 기억하는 사람은 누구입니까?
img.shape[:2][::-1]
numpy.shape
호출 할 수 없습니다. 그것은 단지 평범tuple
합니다. 불행히도 3 개 또는 2 개의 요소 길이가 될 수 있습니다.