PIL转为Opencv

NumPy数组的图像数据转换为PIL用 的数据对象,这个转换处理由Image.fromarray()来完成。

import cv2
from PIL import Image
pil_image = PIL.Image.open('image.jpg')  #PIL
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
在图像处理和视频生成中,**PILPillow)** 和 **OpenCV** 是两个非常常用的 Python 库。它们各有优势: - **PIL/Pillow**:擅长高质量图像处理(如滤镜、旋、缩放、文字绘制等)。 - **OpenCV**:擅长图像处理与视频写入,尤其适合处理视频流和帧操作。 将两者结合使用,可以充分发挥各自的优势:**使用 PIL 做图像处理,OpenCV 写入视频**。 --- ## ✅ 示例:使用 PILOpenCV 混合处理图像并生成视频 ### 📌 功能说明: - 使用 PIL 对图像进行模糊处理 - 将 PIL 图像换为 OpenCV 格式 - 生成视频并写入 ### ✅ 示例代码: ```python import cv2 import numpy as np from PIL import Image, ImageFilter import os # 视频参数 image_folder = 'images' # 图像文件夹路径 video_path = 'output_video_with_pil_and_opencv.mp4' fps = 30 frame_size = None # 如果为 None,则根据第一张图自动设定 # 获取所有图片 images = [img for img in os.listdir(image_folder) if img.endswith(('.jpg', '.png'))] images.sort() image_paths = [os.path.join(image_folder, img) for img in images] # 读取第一张图获取尺寸 first_frame = cv2.imread(image_paths[0]) height, width, layers = first_frame.shape frame_size = (width, height) # 创建视频写入器 fourcc = cv2.VideoWriter_fourcc(*'mp4v') video = cv2.VideoWriter(video_path, fourcc, fps, frame_size) # 处理每张图像并写入视频 for img_path in image_paths: # 使用 PIL 读取和处理图像 pil_img = Image.open(img_path).convert('RGB') pil_img = pil_img.resize(frame_size) # 使用 PIL 做图像处理:例如模糊 pil_img = pil_img.filter(ImageFilter.GaussianBlur(radius=5)) # 将 PIL 图像换为 numpy 数组 (RGB -> BGR) frame = np.array(pil_img) frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) # 写入视频帧 video.write(frame) # 释放资源 video.release() print(f"视频已生成:{video_path}") ``` --- ### 🧠 代码解释: 1. **图像读取与处理**: - 使用 `PIL.Image.open()` 读取图像。 - 使用 `ImageFilter.GaussianBlur` 实现图像模糊处理。 - 使用 `.resize()` 调整图像大小以匹配视频帧尺寸。 2. **图像格式换**: - PIL 图像是 RGB 格式,OpenCV 图像是 BGR 格式,所以需要使用 `cv2.cvtColor(..., cv2.COLOR_RGB2BGR)` 进行换。 - 也可以使用 `np.array(pil_img)` 将 PIL 图像转为 NumPy 数组。 3. **视频写入**: - 使用 `cv2.VideoWriter` 初始化视频写入器。 - 使用 `video.write(frame)` 写入每一帧。 --- ## ✅ 可扩展应用: 你可以使用 PIL 实现更复杂的图像处理,例如: - 图像上叠加文字(`ImageDraw.Draw().text()`) - 添加滤镜、旋、裁剪 - 生成动画帧(如缩放、渐变、透明度处理) 再通过 OpenCV 合成视频,非常适合制作: - 动态图文视频 - 数据可视化视频 - 自动化视频剪辑 --- ## ✅ 进阶建议: - 使用 `moviepy` 或 `ffmpeg` 实现更复杂的视频处理。 - 使用 `multiprocessing` 并行处理图像以提高效率。 - 使用 `cv2.putText()` 或 PIL 的 `ImageDraw` 在图像上添加文字。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值