【问题标题】:Converting numpy array having image data to CvMat将具有图像数据的 numpy 数组转换为 CvMat
【发布时间】:2012-06-13 02:53:47
【问题描述】:

我在一个 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。

【问题讨论】:

  • 欢迎来到 SO :) 如果我的回答没有帮助,请出示您的代码来识别问题所在,干杯。
  • @fraxel 我无法在评论中正确格式化代码,因此编辑了问题并在那里添加了我的代码。

标签: opencv numpy


【解决方案1】:

您可以直接在您的 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,大小不变。这是保存的图片:

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2018-08-22
    • 2017-06-25
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    相关资源
    最近更新 更多