【Q&S】plt.imshow不显示图片也不报错

问题描述

在我们使用plt读取图片并显示时,可能会用到plt.imshow(),但是我们尝试使用函数时,编译器可能没有报错也没有显示图片,程序就结束了。
文件放置如下:
|–read_img.py
|–Source
|------t1.png

## read_img.py

import cv2
import os
import matplotlib.pyplot as plt
from PIL import Image

source_path='./Source'

def show_pic():
    # img=cv2.imread(os.path.join(source_path,'t1.png'))
    img=Image.open(os.path.join(source_path,'t1.png'))
    plt.imshow(img)
    
if __name__ == '__main__':
    show_pic()

原因分析:

在使用plt.imshow()的时候,需要注意的是,该函数仅读取了图片,并且对图片格式进行了处理,但是并未将图片输出显示。

## read_img.py

import cv2
import os
import matplotlib.pyplot as plt
from PIL import Image

source_path='./Source'

def show_pic():
    # img=cv2.imread(os.path.join(source_path,'t1.png'))
    img=Image.open(os.path.join(source_path,'t1.png'))
    info=plt.imshow(img)
    print(info)   # 尝试输出结果
    
    
if __name__ == '__main__':
    show_pic()

输出结果:
AxesImage(80,52.8;496x369.6)


解决方案:

为了显示图片,我们需要使用plt.show()

## read_img.py

import cv2
import os
import matplotlib.pyplot as plt
from PIL import Image

source_path='./Source'

def show_pic():
    # img=cv2.imread(os.path.join(source_path,'t1.png'))
    img=Image.open(os.path.join(source_path,'t1.png'))
    info=plt.imshow(img)
    print(info)          # 尝试输出结果
    plt.show()           #加上这句话就行
    
    
if __name__ == '__main__':
    show_pic()

当然这句话几乎在所有需要显示的地方都不能忘记,否则还会出现同样的问题。

补充:

代码中出现的这一行

# img=cv2.imread(os.path.join(source_path,'t1.png'))

我们尝试用cv2读取图片,但是结果显示颜色变了,因为cv2读取图像方式是BGR顺序进行排列的,一般的图像显示使用的是RGB的方式,所以颜色会有问题,为了解决这个问题,可以使用cv2.imshow()函数,或者对其格式进行变换

    for i in range(0,1024): #图片是1024*1024*3
        for j in range(0,1024):
            t=img[i][j][0]
            img[i][j][0]=img[i][j][2]
            img[i][j][2]=t

希望本文在记录我遇到的问题的同时,也能够帮助到你。
感谢您的阅读

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CharlieRiccardo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值