【问题标题】:python numpy double array, can't show imagepython numpy双数组,无法显示图像
【发布时间】:2015-01-11 02:24:06
【问题描述】:

我正在尝试在双矩阵中获取多个灰色图像,以便稍后在其上应用 PCA,但我想知道为什么以下方法不起作用:

输入多维numpy数组(灰度图)

darray = np.empty([2,270,270], dtype=int)
darray[0] = cv2.imread("img.png", 0)
print(darray[0].shape)
print(type(darray[0]))
print(darray[0])

cv2.imshow("face", darray[0])
cv2.waitKey(3000)

输出(仅黑色图像)

(270, 270)
<type 'numpy.ndarray'>
[[11 12 13 ..., 33 34 35]
 [13 12 11 ..., 34 36 37]
 [14 13 12 ..., 33 34 35]
 ..., 
 [82 81 81 ..., 94 93 93]
 [82 81 81 ..., 96 95 95]
 [83 82 82 ..., 92 92 92]]
**Only black as image**

输入法线数组(灰度图)

nparray = cv2.imread("img.png", 0)
print(nparray.shape)
print(type(nparray))
print(nparray)

cv2.imshow("face", nparray)
cv2.waitKey(3000)

输出(普通图像)

(270, 270)
<type 'numpy.ndarray'>
[[11 12 13 ..., 33 34 35]
 [13 12 11 ..., 34 36 37]
 [14 13 12 ..., 33 34 35]
 ..., 
 [82 81 81 ..., 94 93 93]
 [82 81 81 ..., 96 95 95]
 [83 82 82 ..., 92 92 92]]
**normal gray image**

为什么第一段代码只返回黑色图像,第二段代码是我读取的正常图像?

系统规格

  • Ubuntu 12.04
  • Python 2.7.3
  • OpenCV 2.4.9

【问题讨论】:

  • using: np.savetxt('darray.txt', darray[0]) 或 np.savetxt('nparray.txt', nparray) 都给出相同的输出文件,所以我不明白为什么 cv2.imshow() 不能同时在两者上工作?

标签: python arrays image numpy multidimensional-array


【解决方案1】:

这是由于darray[0] = cv2.imread("img.png", 0),它只能适合图像的 1 个通道。其实应该是3个通道,分别是R、G、B。你可以在第二段代码中看到nparray.shape

【讨论】:

  • 这仅适用于彩色图像。 , 0) 表示图像加载为灰度图像。抱歉,我忘了提到它是关于灰色图像的。灰度图像的 imread 没有通道信息,否则带有“nparray.shape”的第二段代码将返回 (270, 270, 1)
【解决方案2】:

我发现错误在于编码 dtype=int 应该是 dtype=np.uint8。

import numpy as np
darray = np.empty([2,270,270], dtype=np.uint8)

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多