【问题标题】:numpy array set image dimension opencvnumpy数组设置图像维度opencv
【发布时间】:2018-12-07 12:52:12
【问题描述】:

我从未指定尺寸的成像设备获取原始灰度帧。 但我知道原始帧是 342x260 像素。 初始处理后,我有一个 uint16 numpy 数组(一维数组)。如何使用 cv2.imshow 显示数组?

cv2.imshow('image', npframe)
cv2.waitKey(0)
cv2.destroyAllWindows()

我得到的只是一个看起来很奇怪的窗口,它延伸了我的屏幕的整个高度:

【问题讨论】:

    标签: arrays image numpy opencv


    【解决方案1】:

    您可以使用npframe.shape 获取图像大小。对于灰度图像,这将返回一个包含两个元素的元组(y, x),例如高度和宽度的(260, 342),或者对于彩色(RGB/BGR)图像,这将返回一个包含三个元素的元组(y, x, c),分别表示高度、宽度和频道数。

    您可以通过首先定义窗口名称来设置窗口大小:

    cv2.namedWindow('image', cv2.WINDOW_NORMAL)
    

    WINDOW_NORMAL 标志可让您调整图像大小:

    cv2.resizeWindow('image', npframe.shape[1], npframe.shape[0])
    

    其中npframe.shape[1]x 维度中的图像大小,npframe.shape[0]y 维度中的图像大小。

    那么你的cv2.imshow('image', npframe) 命令就是图片的大小。

    【讨论】:

    • 谢谢,但数组仅由单个数字组成,因此 npframe.shape 返回 (88920,)。正如我所说,它来自 USB 批量传输的原始数据是 342x260 像素(包括元数据)和仅 320x240 图像。我最近将原始数据写入二进制文件,imagemagik 能够生成图像: convert -depth 16 -endian lsb -size 342x260 gray:raw.bin -auto-level raw.png
    • 那么您需要获取一维数组并将其映射到二维数组,因为imshow() 期望命名的图像文件是二维数组。您获得的图像可能是单列像素,即 1 像素宽和 88920 像素高的图像。
    • 谢谢,用“img = npframe.reshape(260,342)”得到它。我现在可以显示图像并且窗口也是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2017-10-07
    • 2014-07-30
    • 2011-03-04
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多