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

2024-04-23 19:35:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 方法图像numpy列表宽度高度格式cv2
1条回答
网友
1楼 · 发布于 2024-04-23 19:35:35

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

网友
2楼 · 发布于 2024-04-23 19:35:35

恐怕没有比这更好的方法了,不过也没那么痛苦。

当然,您的代码对于二进制/单声道图像和多通道图像都应该是安全的,但是图像的主要维度总是以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]更令人难忘。谁还记得反向切割呢?

相关问题 更多 >