问题描述
在我们使用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
希望本文在记录我遇到的问题的同时,也能够帮助到你。
感谢您的阅读
文章出处登录后可见!
已经登录?立即刷新