栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

一些代码小技巧

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一些代码小技巧

目录
  • 1. cv2
    • 1.1 读取照片
    • 1.2 转换格式
    • 1.3 写入图像
    • 1.4 显示图像
  • 2. PIL
    • 1. 读取、写入图像
    • 2. 转换
      • 2.2.1 转换模式('RGB'、'L')
      • 2.2.2 转换数据类型 numpy ←→ PIL
    • 3. 消除PIL图像中的exif


1. cv2 1.1 读取照片
  • 默认:BGR
  • image.shape:[h, w, c]
  • 类型:numpy.ndarray
image_path = 'data/threepeople/images/train/cliproimore_1.jpg'
image = cv2.imread(image_path)  # BGR
image_rgb = cv2.imread(image_path)[..., ::-1]  # BGR to RGB

读取中文路径图像:

img = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1)

1.2 转换格式

参考博客:opencv-python的格式转换 RGB与BGR互转

opencv读取图片的默认像素排列是BGR,和很多其他软件不一致,需要转换。

  • BGR to RGB ( OpenCV image to Matplotlib )
rgb = bgr[...,::-1]
  • RGB to BGR ( Matplotlib image to OpenCV )
bgr = rgb[...,::-1]	# ::-1表示逆序
  • RGB to GBR ( 这个应该很少用到 )
gbr = rgb[...,[2,0,1]]

1.3 写入图像
cv2.imwrite('image.jpg', image)

保存中文图像名称:

cv2.imencode(".jpg", im0)[1].tofile(save_path) 

1.4 显示图像
def cv_show(winname, img):
    cv2.imshow(winname, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2. PIL 1. 读取、写入图像
  • 默认:RGB
  • image.size:[w, h]
  • 类型:PIL.Image
from PIL import Image
image_path = 'data/threepeople/images/train/cliproimore_1.jpg'
image = Image.open(image_path)	# RGB

写入图像

image.save(save_path)

2. 转换 2.2.1 转换模式(‘RGB’、‘L’)

用 convert 转换时,可选 mode 有3种:“L”, “RGB” and “CMYK” ,一般只用得到前两种,分别表示灰度图像、RGB三通道图像。

有时候可能读取的图像是4通道RGBA的(例如png),但是在训练过程中是需要3通道RGB的(例如jpg),因此需要转换一下:

image = Image.open(image_path)	# RGBA
image = image.convert('RGB')	# RGB

2.2.2 转换数据类型 numpy ←→ PIL
  • PIL → numpy
from PIL import Image
import numpy as np
image = Image.open(image_path)	# PIL.JpegImagePlugin.JpegImageFile
image = np.array(image)			# numpy.ndarray
  • numpy → PIL
from PIL import Image
import cv2

image = cv2.imread(image_path)      # BGR
image = image[..., ::-1]            # BGR -> RGB
image = Image.fromarray(image)      # numpy -> PIL
image.show()
image.save('image_PIL.jpg')

3. 消除PIL图像中的exif

因为相机的Exif信息所以在PyCharm中打开的图像自动旋转了

使用 ImageOps 包

from PIL import Image, ImageOps
img = Image.open(img_path)
img = ImageOps.exif_transpose(img)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号