numpy中的shape和opencv中的shape的区别

在使用opencv和numpy的过程中,难免会需要对图像的大小进行调整,resize、获得shape之类的操作更是家常便饭了,但是在使用opencv和numpy改变图像大小的过程中,总是发现一些奇怪的问题,困扰了我很久,今天记录一下,以防下次再犯,也为有相同困扰的童鞋提个醒!
先来看看通过opencv读取一张图像之后,shape是什么吧:
我么来读取一张宽858,长600的图像:

>>> im = cv2.imread("XXX")
>>> im.shape
(600, 858, 3)
>>>

很显然,shape的组成是这样的: (高,宽,通道数)
再来看看numpy,numpy中很多的方法都带有shape这个参数,当使用numpy来创建一幅图像的时候,总是容易将opencv和numpy的shape搞混掉,我们先看看numpy创建一个二维数组:

>>> a = np.zeros((3,5))
>>> a
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
>>>

很显然,我们传入的(3,5)作为shape的参数,而结果显示,3是行数,5是列数,即3是高度,5是宽度,那么我们使用numpy创建一幅图像时,shape就是 (高度,宽度), 如果还有通道的话,就是 (高度,宽度,通道数).
原来,numpy的shape[0:2]和opencv中通过imread读取的图像的shape[0:2]是一样的的,即 (高度,宽度).
但是在向opencv的方法中传入size参数时,又是什么样的呢?
还是用刚刚读取的图像做例子(高600,宽858),

>>> reim = cv2.resize(im,(200,400))
>>> cv2.imshow("resize",reim)
>>> cv2.waitKey(3000)

在这里插入图片描述
显然,我们传入的size参数是这样解释的 200作为宽,400作为高,即size为 (宽,高),这和我们之前看到的shape里数据的顺序是不一样的!其实当我们涉及界面或者图像的size时,size中数据的排列方式一般都是 ( 宽,高) ,所以当我们想使用某些图片或者控件等的size时,请注意size和shape中数据的顺序是不一样的!

猜你喜欢

转载自blog.csdn.net/Miha_Singh/article/details/88960766
今日推荐