如何在Python OpenCV(numpy)中獲取cv2
包裝中的圖像大小。有沒有比numpy.shape()
更正確的方法。如何獲得格式維度:(寬度,高度)列表?Python opencv2(cv2)包裝獲取圖像大小?
感謝
如何在Python OpenCV(numpy)中獲取cv2
包裝中的圖像大小。有沒有比numpy.shape()
更正確的方法。如何獲得格式維度:(寬度,高度)列表?Python opencv2(cv2)包裝獲取圖像大小?
感謝
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
將有兩個維度,因此,你必須將代碼更改爲:height, width = img.shape
哦,來吧。而不是假設圖像是BGR或單色,只需要寫一般 - 'h,w = img.shape [:2]',尤其是OP對深度沒有興趣。 (我也沒有)。查看我的答案瞭解更多詳情。 –
我覺得這有幫助:http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#accessing-image-properties – djwbrown
我恐怕沒有「更好」的方式來達到這個尺寸,但是這並不是那麼痛苦。
當然,您的代碼對於二進制/單色圖像以及多通道圖像都應該是安全的,但圖像的主要尺寸總是以numpy陣列的形狀出現。如果您選擇可讀性,或者不想打擾輸入,可以將其封裝在一個函數中,併爲其指定一個您喜歡的名稱,例如cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return tuple(img.shape[1::-1])
如果你在一個終端/ IPython中,你也可以用一個lambda表達出來:與def
>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
書寫功能,而交互工作不好玩。
編輯
原本我以爲使用[:2]
是確定的,但numpy的形狀是(height, width[, depth])
,我們需要(width, height)
,作爲例如cv2.resize
預計,所以 - 我們必須使用[1::-1]
。比[:2]
更難忘。誰又記得反向切片?
'numpy.shape'不可調用。這只是一個普通的「元組」。不幸的是,它可以是3或2個元素。 –