【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;496×369.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

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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年5月25日 下午4:57
下一篇 2022年5月25日 下午5:01

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!