一、读取显示
方法一: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》