【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

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

你可能感兴趣的:(Q&S,opencv,python)