【问题标题】:How to convert numpy matrix to cv2 image [python]如何将numpy矩阵转换为cv2图像[python]
【发布时间】:2018-03-26 14:19:30
【问题描述】:

我有一个代表彩色图像的 numpy 2d 矩阵。这个矩阵有一些负数和浮点数,但我当然可以使用 imshow(my_matrix) 显示图像。

my_matrix_screenshot

我需要对此彩色图像执行直方图均衡化,因此我在 stackoverflow 中使用 cv2 (OpenCV Python equalizeHist colored image) 找到了一个代码,但问题是我无法将 2d 矩阵转换为需要 RGB 三个通道的 cv 矩阵。

我再次搜索,但我发现的只是将常规 3d numpy 矩阵转换为 cv2 矩阵,那么如何将 numpy 2d 矩阵转换为具有 3 个通道的 cv2 矩阵?

【问题讨论】:

  • my_matrix.shape 的输出是什么?
  • 输出为 (90, 100)
  • "我有一个代表彩色图像的 numpy 2d 矩阵" 如果您知道此彩色图像的原始形状,可以使用np.reshape() 将其转换为 3D 数组
  • new_img = np.reshape(img,(rows,cols/3,3)
  • 它给出了一个错误:ValueError: cannot reshape array of size 9000 into shape (90,33,3) in this line: new_img = np.reshape(new_img_tmp,(int(new_img_tmp.shape[0 ]), int(new_img_tmp.shape[1]/3),3))

标签: python opencv numpy cv2


【解决方案1】:

因为 numpy.ndarray 是 cv2 的基础,所以你只要像往常一样写代码,就像

img_np = np.ones([100,100])
img_cv = cv2.resize(img_np,(200,200))

你可以试试

【讨论】:

  • 这个答案似乎在回答一个完全不同的问题。该问题没有询问有关调整数组大小的问题。
【解决方案2】:

最好将现有的 numpy 数组堆叠在其自己的副本之上,而不是对其进行整形并添加第三个轴。 检查此代码:

import numpy as np
import matplotlib.pyplot as plt

a = np.random.rand(90, 100) # Replace this line with your 90x100 numpy array.
a = np.expand_dims(a, axis = 2)
a = np.concatenate((a, a, a), axis = 2)
print(a.shape)
# (90, 100, 3)
plt.imshow(a)
plt.show()

你会得到一个灰色的图像。

【讨论】:

  • 谢谢!但是当我使用上面的代码时,我会完全分心,或者你可以说不同的图像!
  • 希望您在运行时没有使用np.random.rand 行。您必须用现有的 90x100 numpy 数组替换该行。为了代码完成,我生成了一个随机数组。
  • 当然不是。我只是把我的矩阵插在那里;)但我得到了奇怪的结果。我不知道是否可以将原始图像和结果图像发送给您。这就是我正在做的事情: a = new_img_tmp a = np.expand_dims(a, axis = 2) a = np.concatenate((a, a, a), axis = 2) print(a.shape) # (90, 100, 3) plt.imshow(a) plt.show()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2017-01-29
  • 2014-12-21
相关资源
最近更新 更多