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

如何在Python OpenCV(numpy)的cv2包装中获取图像的大小。 有没有比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将有两个维度,因此您必须将代码更改为: height, width = img.shape

恐怕没有“更好”的办法来达到这个尺寸,但是这并不是那么痛苦。

当然你的代码对于二进制/单色图像以及多通道图像都应该是安全的,但是图像的主要尺寸总是以numpy数组的形状出现。 如果你select可读性,或者不想打扰这个,你可以把它包装在一个函数中,给它一个你喜欢的名字,例如cv_size

 import numpy as np import cv2 # ... def cv_size(img): return tuple(img.shape[1::-1]) 

如果你使用的是terminal/ 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]更难忘。 谁又记得反向切片?