Python opencv2(cv2)包装器获取图像大小?

xer*_*ool 86 python opencv numpy image

如何cv2在Python OpenCV(numpy)中获取包装器中的图像大小.有没有正确的方法来做到这一点numpy.shape().如何获得格式尺寸:(宽度,高度)列表?

谢谢

jab*_*edo 176

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
Run Code Online (Sandbox Code Playgroud)

如果您使用的是二进制图像,img则会有两个维度,因此您必须将代码更改为:height, width = img.shape

  • 哦,来吧.不要假设图像是BGR或单声道,而是一般写 - "h,w = img.shape [:2]",特别是因为OP对深度不感兴趣.(我也不是).有关详细信息,请参阅我的回答 (15认同)
  • 我发现这很有帮助:http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#accessing-image-properties (2认同)

Tom*_*dor 18

我担心没有"更好"的方法来获得这个尺寸,但这并不是那么大的痛苦.

当然,对于二进制/单声道图像以及多声道图像,您的代码应该是安全的,但是图像的主要尺寸总是首先出现在numpy数组的形状中.如果你选择了可读性,或者不想打扰这个,你可以将它包装在一个函数中,并给它一个你喜欢的名字,例如cv_size:

import numpy as np
import cv2

# ...

def cv_size(img):
    return tuple(img.shape[1::-1])
Run Code Online (Sandbox Code Playgroud)

如果你在终端/ ipython上,你也可以用lambda表达它:

>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
Run Code Online (Sandbox Code Playgroud)

def在交互式工作时,编写函数并不好玩.

编辑

最初我认为使用[:2]是可以的,但是numpy形状是(height, width[, depth]),我们需要(width, height),例如cv2.resize期望,所以 - 我们必须使用[1::-1].更难忘的是[:2].谁还记得反向切片?

  • 没有理由你必须爱上你的索引括号中的冒号.return(image.shape [1],image.shape [0])既简洁又可读. (10认同)