1997,巴黎的香颂与贝尔格莱德的战火:一段跨越时空的邂逅

核心内容摘要

zzj中国zzj-zzj中国zzj:在时代的脉动中,探寻东方美学的极致表达
从《我们恋爱吧3》看伊能静的“女性清醒学”:爱人之前,先完整你自己

午夜免费时刻:点亮你我心中不灭的星辰

项目介绍1 实现效果运行程序后调用电脑默认摄像头实时采集画面并分割为左上、右上、左下、右下四个区域每个区域独立应用不同的艺术风格迁移模型星月夜、缪斯、海浪、马赛克最终拼接为完整画面实时展示按下 Esc 键即可退出程序。

预训练风格模型准备本文使用的是 OpenCV dnn 模块兼容的Torch 格式.t7 风格迁移预训练模型这类模型体积小、推理速度快适合实时场景

模型下载可从 OpenCV 官方示例库、GitHub 开源仓库获取星月夜starry_night.t

缪斯la_muse.t

海浪the_wave.t

马赛克mosaic.t7等经典模型

路径配置在项目根目录下创建model文件夹将下载的所有.t7 模型放入其中保证代码中模型路径与实际文件一致。

核心功能模块

1 模型加载模块load_style_model功能封装 OpenCV dnn 模型加载逻辑接收模型文件路径返回加载好的神经网络对象为后续风格迁移做准备。

import cv2 def load_style_model(model_path): net cv

dnn.readNet(model_path) # 加载预训练模型 return netcv

dnn.readNet()是 OpenCV dnn 模块的通用模型加载函数支持 Torch.t

Caffe.prototxt/.caffemodel、TensorFlow.pb等多种格式

2 风格迁移处理模块apply_style_transfer功能接收单区域画面、加载好的风格模型、模型输入目标尺寸完成图像预处理→模型前向传播→结果后处理的完整风格迁移流程返回风格化后的单区域画面是项目的核心算法模块。

import cv2 import numpy as np def apply_style_transfer(frame, net, target_sizeNone): h, w frame.shape[:2] if target_size is None: target_size (w, h) # 预处理转换为dnn模块支持的blob格式 blob cv

dnn.blobFromImage(frame, 1, target_size, (0, 0,

, swapRBFalse, cropFalse) # 前向传播输入blob获取风格化结果 net.setInput(blob) output net.forward() # 后处理恢复维度、归一化、转换为常规图像格式 output output.reshape(output.shape[1], output.shape[2], output.shape[3]) cv

normalize(output, output, norm_typecv

NORM_MINMAX) output output.transpose(1, 2,

# 恢复原区域尺寸 output cv

resize(output, (w, h)) return output

尺寸初始化若未指定目标尺寸默认使用输入画面的原始尺寸保证兼容性

图像预处理blob 转换cv

dnn.blobFromImage()是 dnn 模块的核心预处理函数将常规的 HWC高度 - 宽度 - 通道格式图像转换为 NCHW批次 - 通道 - 高度 - 宽度格式的 blob深度学习模型标准输入格式参数说明scale1像素值不缩放、mean(0,0,

不做均值消减、swapRBFalse风格模型要求 RGB 格式OpenCV 读取的图像为 BGR需根据模型需求调整、cropFalse不裁剪保持画面完整

模型前向传播net.setInput(blob)设置模型输入net.forward()执行推理计算直接输出风格化后的特征图

结果后处理reshape调整特征图维度适配后续处理cv

normalize()使用 MINMAX 归一化将特征图数值映射到 [0,1] 区间避免像素值溢出transpose将 NCHW 格式转回 HWC 格式恢复为常规图像的维度顺序resize将风格化后的画面恢复为原区域尺寸保证拼接后无变形。

3 主程序模块main功能项目的入口和总控模块整合所有功能完成参数配置→摄像头初始化→模型批量加载→主循环实时处理→资源释放的完整流程是程序的运行核心。

2.

1配置参数定义将所有可自定义的参数集中定义便于后续调试和修改# 摄像头ID默认0为电脑内置摄像头外接摄像头可改为1/2 CAMERA_ID 0 # 四格区域与对应风格模型的映射键为区域名称值为模型文件路径 MODEL_PATHS { top_left: rmodel\starry_night.t7, top_right: rmodel\la_muse.t7, bottom_left: rmodel\the_wave.t7, bottom_right: rmodel\mosaic.t7 } TARGET_SIZE (200,

# 模型输入尺寸越小推理速度越快可根据性能调整 ESC_KEY 27 # Esc键的ASCII码用于退出程序

2.

2 摄像头初始化调用 OpenCV 的 VideoCapture 类打开摄像头# 打开摄像头 cap cv

VideoCapture(CAMERA_ID) if not cap.isOpened(): print(f错误无法打开摄像头ID{CAMERA_ID}) return

2.

3 预训练模型批量加载通过字典推导式批量加载 MODEL_PATHS 中的所有风格模型加入异常捕获若模型加载失败则释放摄像头并退出程序try: models { key: load_style_model(path) for key, path in MODEL_PATHS.items() } print(所有风格模型加载成功) except Exception as e: print(f模型加载失败{e}) cap.release() # 及时释放摄像头资源 return

2.

4 实时采集与风格迁移这是程序的核心执行循环实现摄像头帧读取→画面四格分割→多风格并行迁移→画面拼接→实时展示的完整逻辑while True: #

读取摄像头帧ret为是否读取成功frame为采集到的画面 ret, frame cap.read() if not ret: print(错误无法读取摄像头画面) break #

获取原画面尺寸计算分割点画面中心 h, w, c frame.shape h_half, w_half h // 2, w // 2 #

四格画面分割基于numpy切片高效分割无冗余 top_left frame[0:h_half, 0:w_half, :] top_right frame[0:h_half, w_half:w, :] bottom_left frame[h_half:h, 0:w_half, :] bottom_right frame[h_half:h, w_half:w, :] #

为每个区域应用对应风格迁移调用封装的处理函数 top_left_style apply_style_transfer(top_left, models[top_left], TARGET_SIZE) top_right_style apply_style_transfer(top_right, models[top_right], TARGET_SIZE) bottom_left_style apply_style_transfer(bottom_left, models[bottom_left], TARGET_SIZE) bottom_right_style apply_style_transfer(bottom_right, models[bottom_right], TARGET_SIZE) #

画面拼接先水平拼接行再垂直拼接列基于numpy的hstack/vstack高效无失真 top_row np.hstack((top_left_style, top_right_style)) # 水平拼接左上、右上 bottom_row np.hstack((bottom_left_style, bottom_right_style)) # 水平拼接左下、右下 final_frame np.vstack((top_row, bottom_row)) # 垂直拼接上下两行 #

尺寸校准保证拼接后画面与原摄像头画面尺寸一致避免显示变形 final_frame cv

resize(final_frame, (w, h)) #

实时展示风格化后的完整画面 cv

imshow(Camera 4-Grid Art Style Transfer, final_frame) #

按键检测60ms延迟平衡画面流畅度和按键响应速度0xFF处理跨平台按键兼容 key cv

waitKey(

0xFF if key ESC_KEY: print(用户按下Esc键退出程序) break采用 numpy 切片分割画面比 OpenCV 的 ROI 提取更高效无内存冗余风格迁移函数批量调用每个区域独立处理无相互干扰

结果显示

姐姐6免费完整高清电视剧看-姐姐6免费完整高清电视剧看应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123