知方号

知方号

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

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))>>> aarray([[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中数据的顺序是不一样的!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。