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

时间:2013-09-30 15:29:04

标签: python image opencv numpy

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

由于

2 个答案:

答案 0 :(得分:155)

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

答案 1 :(得分:17)

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

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

import numpy as np
import cv2

# ...

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

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

>>> 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]更难忘。谁还记得反向切片?