我正在尝试对有2个问题的图像执行直方图均衡化。首先,我需要绘制灰度图的直方图。当我尝试将RGB图像转换为灰度图像时,输出为蓝色和黄色图像。我的代码如下:
img = cv2.imread(r'D:/UNI/Y3/DIA/2K18/lab.jpg')
RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(RGB_img, cv2.COLOR_RGB2GRAY)
plt.imshow(gray)
plt.title('My picture (before hist. eq.)')
plt.show()
这是Jupyter Notebook的输出:
但是我只是意识到,如果我保存了它,可以正确保存它:
由于我需要提交jupyter文档,我该如何克服这个问题?谢谢!
第二,我执行直方图均衡化,但是当尝试水平堆叠图像时,从此代码得到以下错误:
equ = cv2.equalizeHist(gray)
res = np.hstack((img,equ))
错误-> all the input arrays must have same number of dimensions
据我所知,我完全没有触摸图像的尺寸...
编辑:
左图应该是RGB
答案 0 :(得分:2)
按照@Fredrik的建议,您可以使用plt.imshow(gray, cmap='gray', vmin = 0, vmax = 255)
获得灰度输出,也可以使用gray = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB)
将灰度图像转换为3通道RGB图像。
基本上,问题是gray = cv2.cvtColor(RGB_img, cv2.COLOR_RGB2GRAY)
返回单个通道矩阵,因为matplotlib期望显示3通道RGB矩阵,所以您可以告诉plt.imshow()
您的输入矩阵是单个使用plt.imshow(gray, cmap='gray', vmin = 0, vmax = 255)
的通道矩阵,也可以将单个通道矩阵转换为3通道矩阵,然后简单地使用plt.imshow(gray)
,一切正常。
对于问题的第二部分,res = np.hstack((img,equ))
会引发错误,调试矩阵的形状总是很有帮助的,您希望对其应用操作,可以通过print img.shape
,{ {1}}。据我所知,您的print equ.shape
是一个3通道矩阵(BGR),而您的img
是一个单通道矩阵(灰色),因此会出现错误,您需要转换此{{1 }}再次使用equ
转换为3通道矩阵。