1

我在一个 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 大小为 429x509。

4

1 回答 1

2

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

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,大小不变。这是保存的图像:

在此处输入图像描述

于 2012-06-09T07:57:00.543 回答