学习日志(十四):Python之图片读取显示和保存

一、读取显示

方法一:OpenCV

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
imagea_path = './demo/inputs/birds.jpg'
#= = = = = = = = = =  =CV2
image_cv2 = cv2.imread(imagea_path)
print(type(image_cv2),image_cv2.shape)
cv2.imshow('cv2',image_cv2)
cv2.waitKey(0)
#numpy.ndarray  (321,481,3)

方法二:Matplotlib

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
imagea_path = './demo/inputs/birds.jpg'
#= = = = = = = = = = =matplotlib
image_plt = plt.imread(imagea_path)
print(type(image_plt),image_plt.shape)
plt.imshow(image_plt)
plt.show()
#numpy.ndarray  (321,481,3)

方法三:PIL+plt

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
imagea_path = './demo/inputs/birds.jpg'
#= = = = = = = = = = =image
image_image = image.open(imagea_path)
print(type(image_image),image_image.size)
plt.imshow(image_image)
plt.show()
#PIL.JpegImagePlugin.JpegImageFile  (481,321)
#numpy.ndarray  463203

方法三:PIL+cv2

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
imagea_path = './demo/inputs/birds.jpg'
#= = = = = = = = = = =image
image_image = image.open(imagea_path)
print('1',type(image_image),image_image.size)
image_image = numpy.array(image_image)
print('2',type(image_image),image_image.size)
cv2.imshow('x',image_image)
cv2.waitKey(0)
#PIL.JpegImagePlugin.JpegImageFile  (481,321)
#numpy.ndarray  463203

使用cv2显示图片的话,输入必须是numpy.ndarray类型,而image.open()读出的并不是,所以需要类型转化。

二、保存

方法一:CV2

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--image-path',type=str,default='./demo/inputs')
parser.add_argument('--save-path',type=str,default='./demo/output')
args = parser.parse_args()

if not os.path.exists(args.save_path):
    os.makedirs(args.save_path)

def main(args):
    name_list = os.listdir(args.image_path)
    for name in name_list:
        img_path = os.path.join(os.getcwd(),'demo/inputs',name)
        image = cv2.imread(img_path)
        image_crop = image[0:300,0:300]
        cv2.imwrite(img_path.replace('inputs','output'),image_crop)

if __name__ == '__main__':
    main(args)

方法二:plt.imsave()

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--image-path',type=str,default='./demo/inputs')
parser.add_argument('--save-path',type=str,default='./demo/output')
args = parser.parse_args()

if not os.path.exists(args.save_path):
    os.makedirs(args.save_path)

def main(args):
    name_list = os.listdir(args.image_path)
    for name in name_list:
        img_path = os.path.join(os.getcwd(),'demo/inputs',name)
        image = plt.imread(img_path)
        image_crop = image[0:300,0:300]
        plt.imsave(img_path.replace('inputs','output'),image_crop)
if __name__ == '__main__':
    main(args)
#强调一点,如果是使用cv2.imread(),再使用plt.imsave()图片的颜色会发生变化,建议配套使用。

方法三:plt.savefig()

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
from torchvision import transforms
unloader =transforms.ToPILImage()
import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--image-path',type=str,default='./demo/inputs')
parser.add_argument('--save-path',type=str,default='./demo/output')
args = parser.parse_args()

if not os.path.exists(args.save_path):
    os.makedirs(args.save_path)

def main(args):
    name_list = os.listdir(args.image_path)
    for name in name_list:
        img_path = os.path.join(os.getcwd(),'demo/inputs',name)
        image = plt.imread(img_path)
        image_crop = image[0:300,0:300]
        plt.imshow(image_crop)
        plt.savefig(img_path.replace('inputs','output'))
if __name__ == '__main__':
    main(args)
#使用savefig()前必须用imshow()

方法四:save()

import matplotlib.pyplot as plt
import PIL.Image as image
import cv2
import numpy
from torchvision import transforms
unloader =transforms.ToPILImage()
import os
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--image-path',type=str,default='./demo/inputs')
parser.add_argument('--save-path',type=str,default='./demo/output')
args = parser.parse_args()

if not os.path.exists(args.save_path):
    os.makedirs(args.save_path)

def main(args):
    name_list = os.listdir(args.image_path)
    for name in name_list:
        img_path = os.path.join(os.getcwd(),'demo/inputs',name)
        image = plt.imread(img_path)
        image_crop = image[0:300,0:300]
        image_crop = unloader(image_crop)
        image_crop.save(img_path.replace('inputs','output'))
if __name__ == '__main__':
    main(args)
#必须使用unloader()

参考文献:
1.《学习日志(十五):图片裁剪crop》

猜你喜欢

转载自blog.csdn.net/weixin_44825185/article/details/107121314