【问题标题】:Why plt.imshow() isn't working in matplotlib为什么 plt.imshow() 在 matplotlib 中不起作用
【发布时间】:2021-02-10 20:54:21
【问题描述】:

我正在尝试运行一个简单的代码,该代码获取交通信号灯图像并将其显示为灰度 -->“原始”,然后获取相同的图像并仅显示对应于上限和下限阈值的部分我预先定义了 --> 'bright'。但是,当我运行以下代码时,它什么也不显示。 当我将 plt.imshow() 更改为 cv2.imshow() 时,它确实如此,所以我对为什么会发生这种情况感到困惑。两个库都安装正确。我什至尝试在代码末尾添加 plt.show() ,但仍然没有输出。

import cv2
import matplotlib.pyplot as plt 


original = cv2.imread('traffic_lights.jpeg')
plt.imshow(original,cmap='gray')
lower=150
upper = 254
bright = cv2.inRange(original,lower,upper)
plt.imshow(bright,cmap='gray')

【问题讨论】:

    标签: python opencv matplotlib


    【解决方案1】:

    我认为您需要指定图形和轴,然后在轴上绘制图像。

    import cv2
    import matplotlib.pyplot as plt 
    
    
    original = cv2.imread('traffic_lights.jpeg')
    plt.imshow(original,cmap='gray')
    lower = 150
    upper = 254
    bright = cv2.inRange(original,lower,upper)
    fig, ax = plt.subplots()
    im = ax.imshow(bright,cmap='gray')
    plt.show()
    

    【讨论】:

      【解决方案2】:

      首先使用 cv2.COLOR_xxx 将您的图像作为 opencv 图像转换为正确的色标:

      import cv2
      import matplotlib.pyplot as plt 
      
      original = cv2.imread('traffic_light.jpg')
      original = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
      lower, upper = 150, 254
      bright = cv2.inRange(image, lower, upper)
      plt.imshow(bright,cmap='gray')
      

      【讨论】:

        【解决方案3】:

        OpenCV imread 函数以BGR 方式读取图像。

        • 因此如果你读取imread的图片,想用pyplot显示,首先需要将图片转换成RGB再显示。

        • 例如:


        import cv2
        import matplotlib.pyplot as plt
        
        if __name__ == '__main__':
            img = cv2.imread("lights.jpg")
            img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            plt.imshow(img)
            plt.show()
        

        结果:


        • 如果您不使用 cvtColor 进行转换,结果将是:

        • 以上对于RGB 图像,对于灰色图像,正确答案是:
        import cv2
        import matplotlib.pyplot as plt
        
        if __name__ == '__main__':
            img = cv2.imread("lights.jpg")
            img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            plt.imshow(img_rgb, cmap='gray')
            plt.show()
            lower = 150
            upper = 254
            bright = cv2.inRange(img_rgb, lower, upper)
            plt.imshow(bright, cmap='gray')
            plt.show()
        

        结果:


        【讨论】:

          猜你喜欢
          • 2022-06-21
          • 2023-02-15
          • 2023-03-21
          • 2022-01-24
          • 1970-01-01
          • 2011-04-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多