如何将numpy矩阵转换为OpenCV图像 [python]

9

我有一个numpy 2D矩阵,代表着一张彩色图片。这个矩阵中有一些负数和浮点数,但是我可以使用imshow(my_matrix)来显示图片。

my_matrix_screenshot

我需要对这张彩色图片执行直方图均衡化,所以我在stackoverflow上找到了一段使用OpenCV的代码(OpenCV Python equalizeHist colored image),但问题是我无法将2D矩阵转换为需要RGB三个通道的OpenCV矩阵。
我再次搜索,但我发现所有的内容都是将常规的3D numpy矩阵转换为OpenCV矩阵,那么如何将numpy 2D矩阵转换为需要3个通道的OpenCV矩阵呢?

my_matrix.shape的输出是什么? - akilat90
输出为 (90, 100)。 - user2266175
我有一个numpy 2D矩阵,它代表了一张彩色图片。如果你知道这个彩色图片的原始形状,你可以使用np.reshape()将其转换为一个3D数组。 - akilat90
new_img = np.reshape(img,(rows,cols/3,3) - zindarod
在这行代码中出现了错误:ValueError: 无法将大小为9000的数组重新塑形为(90,33,3)的形状,代码如下:new_img = np.reshape(new_img_tmp,(int(new_img_tmp.shape[0]), int(new_img_tmp.shape[1]/3),3)) - user2266175
2个回答

10
因为numpy.ndarray是OpenCV的基础,所以您只需像平常一样编写代码,例如:
img_np = np.ones([100,100])
img_cv = cv2.resize(img_np,(200,200))

你可以尝试


4
这个回答似乎在回答一个完全不同的问题。问题并没有询问如何调整数组大小。 - Rafael_Espericueta

-3

最好将现有的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()

你将会得到一张灰色的图片。


谢谢!但是当我使用上面的代码时,我完全分心了,或者可以说出现了不同的图像! - user2266175
希望你在运行时没有使用 np.random.rand 这一行。你需要用你已经存在的 90x100 的 numpy 数组替换掉这一行。我只是为了代码完成而生成了一个随机数组。 - Prasad
当然不是。我只是把我的矩阵插到那里;)但是我得到了奇怪的结果。我不知道是否可以将原始图像和结果图像发送给您。这是我正在做的事情: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()
- user2266175

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接