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

    技术2025-03-21  35

    一、读取显示

    方法一: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》

    Processed: 0.012, SQL: 12