2024-04-23 19:35:35 发布
网友
如何在Python OpenCV(numpy)中的cv2包装器中获取图像大小。有没有比numpy.shape()更正确的方法。如何在格式维度(宽度,高度)列表中获取它?
cv2
numpy.shape()
cv2使用numpy来操作图像,因此获得图像大小的最佳方法是使用numpy.shape。假设您正在使用BGR图像,下面是一个示例:
numpy
numpy.shape
>>> 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
img
height, width = img.shape
恐怕没有比这更好的方法了,不过也没那么痛苦。
当然,您的代码对于二进制/单声道图像和多通道图像都应该是安全的,但是图像的主要维度总是以numpy数组的形式排在第一位。如果您选择可读性,或者不想麻烦输入这个,您可以将它包装在一个函数中,并给它一个您喜欢的名称,例如cv_size:
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编写函数并不有趣。
def
编辑
最初我认为使用[:2]是可以的,但是numpy的形状是(height, width[, depth]),我们需要(width, height),正如cv2.resize所期望的,所以-我们必须使用[1::-1]。甚至比[:2]更令人难忘。谁还记得反向切割呢?
[:2]
(height, width[, depth])
(width, height)
cv2.resize
[1::-1]
cv2
使用numpy
来操作图像,因此获得图像大小的最佳方法是使用numpy.shape
。假设您正在使用BGR图像,下面是一个示例:如果您使用的是二进制图像,
img
将具有二维,因此必须将代码更改为:height, width = img.shape
恐怕没有比这更好的方法了,不过也没那么痛苦。
当然,您的代码对于二进制/单声道图像和多通道图像都应该是安全的,但是图像的主要维度总是以numpy数组的形式排在第一位。如果您选择可读性,或者不想麻烦输入这个,您可以将它包装在一个函数中,并给它一个您喜欢的名称,例如
cv_size
:如果您在终端/ipython上,也可以用lambda表示:
在交互工作时,用
def
编写函数并不有趣。编辑
最初我认为使用
[:2]
是可以的,但是numpy的形状是(height, width[, depth])
,我们需要(width, height)
,正如cv2.resize
所期望的,所以-我们必须使用[1::-1]
。甚至比[:2]
更令人难忘。谁还记得反向切割呢?相关问题 更多 >
编程相关推荐