如何将Django的InMemoryUploadedFile转换为PIL或CV2格式图片?
将Django的InMemoryUploadedFile转换为PIL或OpenCV格式
转换为PIL格式
InMemoryUploadedFile本身是类文件对象,可直接用PIL的Image.open()方法读取转换:
from PIL import Image def process_image(request): # 从表单获取上传的文件 uploaded_file = request.FILES['image'] # 转换为PIL Image对象 pil_image = Image.open(uploaded_file) # 示例:执行PIL图片处理操作 resized_image = pil_image.resize((300, 300)) # 保存处理后的图片 resized_image.save('resized_image.png')
即使上传文件因体积过大自动转为TemporaryUploadedFile(超过Django的FILE_UPLOAD_MAX_MEMORY_SIZE阈值时触发),上述代码依然适用。
转换为OpenCV格式
需要先读取文件字节流,再用cv2.imdecode()解析,同时注意OpenCV默认使用BGR颜色通道,若需与其他工具(如PIL)统一,可转为RGB:
import cv2 import numpy as np def process_image(request): uploaded_file = request.FILES['image'] # 将文件内容转为字节数组 file_bytes = np.asarray(bytearray(uploaded_file.read()), dtype=np.uint8) # 解码为OpenCV的Mat对象 cv2_image = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR) # 可选:转换为RGB格式(适配PIL等工具的通道顺序) cv2_image_rgb = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2RGB) # 示例:执行OpenCV处理操作 gray_image = cv2.cvtColor(cv2_image, cv2.COLOR_BGR2GRAY) # 保存处理后的图片 cv2.imwrite('gray_image.jpg', gray_image)
依赖说明
确保已安装所需库:
pip install pillow opencv-python
内容的提问来源于stack exchange,提问作者Mohammed Baashar
相关产品推荐
相关产品推荐

