将具有图像数据的numpy数组转换为CvMat

时间:2012-06-09 07:11:57

标签: opencv numpy

我有一个numpy数组中的图像,我使用savefig保存,然后使用opencv loadImage函数将图像加载到CvMat。但我想删除这个保存图像步骤。

我的Numpy图像大小为25x21,如果我使用fromArray函数,如

im = cv.fromarray(asarray(img))

我得到的尺寸为25x21的CvMat非常小。但是当我将图像保存为png格式并使用LoadImage将其加载回来时,我得到了大小为429x509的全尺寸图像。

有人可以告诉我如何从numpy数组到CvMat获取这个完整大小的图像?我可以将图像从numpy数组转换为代码中的png格式而不使用savefig()保存吗? 这就是我现在正在做的事情。

imgFigure = imshow(zeros((gridM,gridN)),cmap=cm.gray,vmin=VMIN,vmax=5,animated=True,interpolation='nearest',extent=[xmin,xmax,ymin,ymax])  
imgFigure.set_data(reshape(img,(gridM,gridN)))  
draw()  
fileName = '1p_'
fileName += str(counter)
fileName += ".png" 
savefig(fileName,bbox_inches='tight',pad_inches=0.01,facecolor='black')

上面img的大小是525,gridM和gridN是25和21.然后我使用以下方法加载此图像:

img = cv.LoadImage(fileName, cv.CV_LOAD_IMAGE_GRAYSCALE)

现在img size是429x509。

1 个答案:

答案 0 :(得分:2)

您可以直接在numpy数组上使用cv.fromarray(),而无需在中间保存:

import cv
import numpy as np
a = np.arange(0,255,0.0255).reshape(50,200)
b = cv.fromarray(a)
cv.SaveImage('saved.png', b)
print b
#Output:
<cvmat(type=42424006 64FC1 rows=50 cols=200 step=1600 )>

numpy数组变为cvmat,大小不变。这是保存的图像:

enter image description here