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