Ste*_*zzi 0 python opencv jupyter-notebook
我正在尝试对图像执行直方图均衡化,但有 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()
Run Code Online (Sandbox Code Playgroud)
这是 Jupyter Notebook 的输出:
但我刚刚意识到,如果我保存它是否正确保存:
由于我需要提交 jupyter 文档,我该如何解决这个问题?谢谢!
其次,我执行直方图均衡,但是当我尝试水平堆叠图像时,我从这段代码中得到以下错误:
equ = cv2.equalizeHist(gray)
res = np.hstack((img,equ))
Run Code Online (Sandbox Code Playgroud)
错误-> all the input arrays must have same number of dimensions
据我所知,我根本没有触及图像的尺寸......
编辑:
左图应该是RGB
正如@Fredrik 建议的那样,您可以使用plt.imshow(gray, cmap='gray', vmin = 0, vmax = 255)来获得灰度输出,或者您也可以使用 将灰度图像转换为 3 通道 RGB 图像gray = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB)。
基本上问题是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,来做到这一点print equ.shape。据我所知,您img是一个 3 通道矩阵(BGR),而您equ是一个单通道矩阵(灰色),因此出现错误,您需要equ使用cv2.cvtColor(equ, cv2.COLOR_GRAY2RGB).
| 归档时间: |
|
| 查看次数: |
5161 次 |
| 最近记录: |